Jacek Caban : kernel32: Moved K32EnumProcessModules to module.c.
Alexandre Julliard
julliard at winehq.org
Thu May 12 13:57:50 CDT 2011
Module: wine
Branch: master
Commit: 8379893f967edfd35a890eabd73b9b7e1d736afe
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8379893f967edfd35a890eabd73b9b7e1d736afe
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu May 12 12:19:52 2011 +0000
kernel32: Moved K32EnumProcessModules to module.c.
---
dlls/kernel32/module.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++
dlls/kernel32/process.c | 82 -----------------------------------------------
2 files changed, 82 insertions(+), 82 deletions(-)
diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c
index d94850f..347d4aa 100644
--- a/dlls/kernel32/module.c
+++ b/dlls/kernel32/module.c
@@ -1073,6 +1073,88 @@ FARPROC WINAPI DelayLoadFailureHook( LPCSTR name, LPCSTR function )
return NULL;
}
+typedef struct {
+ HANDLE process;
+ PLIST_ENTRY head, current;
+ LDR_MODULE ldr_module;
+} MODULE_ITERATOR;
+
+static BOOL init_module_iterator(MODULE_ITERATOR *iter, HANDLE process)
+{
+ PROCESS_BASIC_INFORMATION pbi;
+ PPEB_LDR_DATA ldr_data;
+ NTSTATUS status;
+
+ /* Get address of PEB */
+ status = NtQueryInformationProcess(process, ProcessBasicInformation,
+ &pbi, sizeof(pbi), NULL);
+ if (status != STATUS_SUCCESS)
+ {
+ SetLastError(RtlNtStatusToDosError(status));
+ return FALSE;
+ }
+
+ /* Read address of LdrData from PEB */
+ if (!ReadProcessMemory(process, &pbi.PebBaseAddress->LdrData,
+ &ldr_data, sizeof(ldr_data), NULL))
+ return FALSE;
+
+ /* Read address of first module from LdrData */
+ if (!ReadProcessMemory(process,
+ &ldr_data->InLoadOrderModuleList.Flink,
+ &iter->current, sizeof(iter->current), NULL))
+ return FALSE;
+
+ iter->head = &ldr_data->InLoadOrderModuleList;
+ iter->process = process;
+
+ return TRUE;
+}
+
+static int module_iterator_next(MODULE_ITERATOR *iter)
+{
+ if (iter->current == iter->head)
+ return 0;
+
+ if (!ReadProcessMemory(iter->process,
+ CONTAINING_RECORD(iter->current, LDR_MODULE, InLoadOrderModuleList),
+ &iter->ldr_module, sizeof(iter->ldr_module), NULL))
+ return -1;
+
+ iter->current = iter->ldr_module.InLoadOrderModuleList.Flink;
+ return 1;
+}
+
+/***********************************************************************
+ * K32EnumProcessModules (KERNEL32.@)
+ *
+ * NOTES
+ * Returned list is in load order.
+ */
+BOOL WINAPI K32EnumProcessModules(HANDLE process, HMODULE *lphModule,
+ DWORD cb, DWORD *needed)
+{
+ MODULE_ITERATOR iter;
+ INT ret;
+
+ if (!init_module_iterator(&iter, process))
+ return FALSE;
+
+ *needed = 0;
+
+ while ((ret = module_iterator_next(&iter)) > 0)
+ {
+ if (cb >= sizeof(HMODULE))
+ {
+ *lphModule++ = iter.ldr_module.BaseAddress;
+ cb -= sizeof(HMODULE);
+ }
+ *needed += sizeof(HMODULE);
+ }
+
+ return ret == 0;
+}
+
#ifdef __i386__
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 2ec5905..f043b87 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -3502,88 +3502,6 @@ BOOL WINAPI K32EnumProcesses(DWORD *lpdwProcessIDs, DWORD cb, DWORD *lpcbUsed)
return TRUE;
}
-typedef struct {
- HANDLE process;
- PLIST_ENTRY head, current;
- LDR_MODULE ldr_module;
-} MODULE_ITERATOR;
-
-static BOOL init_module_iterator(MODULE_ITERATOR *iter, HANDLE process)
-{
- PROCESS_BASIC_INFORMATION pbi;
- PPEB_LDR_DATA ldr_data;
- NTSTATUS status;
-
- /* Get address of PEB */
- status = NtQueryInformationProcess(process, ProcessBasicInformation,
- &pbi, sizeof(pbi), NULL);
- if (status != STATUS_SUCCESS)
- {
- SetLastError(RtlNtStatusToDosError(status));
- return FALSE;
- }
-
- /* Read address of LdrData from PEB */
- if (!ReadProcessMemory(process, &pbi.PebBaseAddress->LdrData,
- &ldr_data, sizeof(ldr_data), NULL))
- return FALSE;
-
- /* Read address of first module from LdrData */
- if (!ReadProcessMemory(process,
- &ldr_data->InLoadOrderModuleList.Flink,
- &iter->current, sizeof(iter->current), NULL))
- return FALSE;
-
- iter->head = &ldr_data->InLoadOrderModuleList;
- iter->process = process;
-
- return TRUE;
-}
-
-static int module_iterator_next(MODULE_ITERATOR *iter)
-{
- if (iter->current == iter->head)
- return 0;
-
- if (!ReadProcessMemory(iter->process,
- CONTAINING_RECORD(iter->current, LDR_MODULE, InLoadOrderModuleList),
- &iter->ldr_module, sizeof(iter->ldr_module), NULL))
- return -1;
-
- iter->current = iter->ldr_module.InLoadOrderModuleList.Flink;
- return 1;
-}
-
-/***********************************************************************
- * K32EnumProcessModules (KERNEL32.@)
- *
- * NOTES
- * Returned list is in load order.
- */
-BOOL WINAPI K32EnumProcessModules(HANDLE process, HMODULE *lphModule,
- DWORD cb, DWORD *needed)
-{
- MODULE_ITERATOR iter;
- INT ret;
-
- if (!init_module_iterator(&iter, process))
- return FALSE;
-
- *needed = 0;
-
- while ((ret = module_iterator_next(&iter)) > 0)
- {
- if (cb >= sizeof(HMODULE))
- {
- *lphModule++ = iter.ldr_module.BaseAddress;
- cb -= sizeof(HMODULE);
- }
- *needed += sizeof(HMODULE);
- }
-
- return ret == 0;
-}
-
/***********************************************************************
* K32QueryWorkingSet (KERNEL32.@)
*/
More information about the wine-cvs
mailing list