Eric Pouech : dbghelp:
Implemented 64 bit versions of EnumerateLoadedModules.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Jan 4 04:45:11 CST 2007
Module: wine
Branch: master
Commit: 883732281ec94dc4e8728ef925fd87fab9e27443
URL: http://source.winehq.org/git/wine.git/?a=commit;h=883732281ec94dc4e8728ef925fd87fab9e27443
Author: Eric Pouech <eric.pouech at wanadoo.fr>
Date: Tue Jan 2 14:24:10 2007 +0100
dbghelp: Implemented 64 bit versions of EnumerateLoadedModules.
---
dlls/dbghelp/dbghelp.spec | 4 +-
dlls/dbghelp/module.c | 72 +++++++++++++++++++++++++++++++++++++++++---
include/dbghelp.h | 2 +
3 files changed, 71 insertions(+), 7 deletions(-)
diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec
index 8457a35..7ceefb7 100644
--- a/dlls/dbghelp/dbghelp.spec
+++ b/dlls/dbghelp/dbghelp.spec
@@ -3,8 +3,8 @@
@ stdcall EnumDirTree(long str str ptr ptr ptr)
@ stub EnumDirTreeW
@ stdcall EnumerateLoadedModules(long ptr ptr)
-@ stub EnumerateLoadedModules64
-@ stub EnumerateLoadedModulesW64
+@ stdcall EnumerateLoadedModules64(long ptr ptr)
+@ stdcall EnumerateLoadedModulesW64(long ptr ptr)
@ stdcall ExtensionApiVersion()
@ stdcall FindDebugInfoFile(str str ptr)
@ stdcall FindDebugInfoFileEx(str str ptr ptr ptr)
diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c
index ce1cc07..e7214b3 100644
--- a/dlls/dbghelp/module.c
+++ b/dlls/dbghelp/module.c
@@ -620,12 +620,12 @@ BOOL WINAPI SymEnumerateModules64(HANDL
}
/******************************************************************
- * EnumerateLoadedModules (DBGHELP.@)
+ * EnumerateLoadedModules64 (DBGHELP.@)
*
*/
-BOOL WINAPI EnumerateLoadedModules(HANDLE hProcess,
- PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
- PVOID UserContext)
+BOOL WINAPI EnumerateLoadedModules64(HANDLE hProcess,
+ PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,
+ PVOID UserContext)
{
HMODULE* hMods;
char base[256], mod[256];
@@ -649,7 +649,7 @@ BOOL WINAPI EnumerateLoadedModules(HAND
!GetModuleBaseNameA(hProcess, hMods[i], base, sizeof(base)))
continue;
module_fill_module(base, mod, sizeof(mod));
- EnumLoadedModulesCallback(mod, (DWORD)mi.lpBaseOfDll, mi.SizeOfImage,
+ EnumLoadedModulesCallback(mod, (DWORD_PTR)mi.lpBaseOfDll, mi.SizeOfImage,
UserContext);
}
HeapFree(GetProcessHeap(), 0, hMods);
@@ -658,6 +658,68 @@ BOOL WINAPI EnumerateLoadedModules(HAND
}
/******************************************************************
+ * EnumerateLoadedModules (DBGHELP.@)
+ *
+ */
+struct enum_load_mod64_32
+{
+ PENUMLOADED_MODULES_CALLBACK cb;
+ PVOID user;
+};
+
+static BOOL CALLBACK enum_load_mod64_32(PSTR name, DWORD64 base, ULONG size,
+ PVOID user)
+{
+ struct enum_load_mod64_32* x = user;
+ return x->cb(name, (DWORD)base, size, x->user);
+}
+
+BOOL WINAPI EnumerateLoadedModules(HANDLE hProcess,
+ PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
+ PVOID UserContext)
+{
+ struct enum_load_mod64_32 x;
+
+ x.cb = EnumLoadedModulesCallback;
+ x.user = UserContext;
+
+ return EnumerateLoadedModules64(hProcess, enum_load_mod64_32, &x);
+}
+
+/******************************************************************
+ * EnumerateLoadedModulesW64 (DBGHELP.@)
+ *
+ */
+struct enum_load_mod64_W64
+{
+ PENUMLOADED_MODULES_CALLBACKW64 cb;
+ PVOID user;
+ WCHAR module[MAX_PATH];
+};
+
+static BOOL CALLBACK enum_load_mod64_W64(PSTR name, DWORD64 base, ULONG size,
+ PVOID user)
+{
+ struct enum_load_mod64_W64* x = user;
+
+ MultiByteToWideChar(CP_ACP, 0, name, -1,
+ x->module, sizeof(x->module) / sizeof(WCHAR));
+ return x->cb(x->module, base, size, x->user);
+}
+
+BOOL WINAPI EnumerateLoadedModulesW64(HANDLE hProcess,
+ PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback,
+ PVOID UserContext)
+{
+ struct enum_load_mod64_W64 x;
+
+ x.cb = EnumLoadedModulesCallback;
+ x.user = UserContext;
+
+ return EnumerateLoadedModules64(hProcess, enum_load_mod64_W64, &x);
+}
+
+/******************************************************************
* SymGetModuleInfo (DBGHELP.@)
*
*/
diff --git a/include/dbghelp.h b/include/dbghelp.h
index 9afaa90..3840a1e 100644
--- a/include/dbghelp.h
+++ b/include/dbghelp.h
@@ -758,6 +758,8 @@ typedef BOOL (CALLBACK *PENUMLOADED_MODU
BOOL WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);
typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PSTR, DWORD64, ULONG, PVOID);
BOOL WINAPI EnumerateLoadedModules64(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID);
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PWSTR, DWORD64, ULONG, PVOID);
+BOOL WINAPI EnumerateLoadedModulesW64(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID);
typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PSTR, ULONG, PVOID);
BOOL WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PSTR, DWORD64, PVOID);
More information about the wine-cvs
mailing list