mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 16:14:40 +00:00
dbghelp: Rewrote SymEnumerateModules with Unicode basis, and implemented SymEnumerateModulesW64.
This commit is contained in:
parent
851197f80c
commit
f1436139fc
|
@ -46,7 +46,7 @@
|
||||||
@ stdcall SymEnumTypesW(ptr double ptr ptr)
|
@ stdcall SymEnumTypesW(ptr double ptr ptr)
|
||||||
@ stdcall SymEnumerateModules(long ptr ptr)
|
@ stdcall SymEnumerateModules(long ptr ptr)
|
||||||
@ stdcall SymEnumerateModules64(long ptr ptr)
|
@ stdcall SymEnumerateModules64(long ptr ptr)
|
||||||
@ stub SymEnumerateModulesW64
|
@ stdcall SymEnumerateModulesW64(long ptr ptr)
|
||||||
@ stdcall SymEnumerateSymbols(long long ptr ptr)
|
@ stdcall SymEnumerateSymbols(long long ptr ptr)
|
||||||
@ stub SymEnumerateSymbols64
|
@ stub SymEnumerateSymbols64
|
||||||
@ stub SymEnumerateSymbolsW
|
@ stub SymEnumerateSymbolsW
|
||||||
|
|
|
@ -632,33 +632,71 @@ BOOL WINAPI SymUnloadModule64(HANDLE hProcess, DWORD64 BaseOfDll)
|
||||||
* SymEnumerateModules (DBGHELP.@)
|
* SymEnumerateModules (DBGHELP.@)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
struct enum_modW64_32
|
||||||
|
{
|
||||||
|
PSYM_ENUMMODULES_CALLBACK cb;
|
||||||
|
PVOID user;
|
||||||
|
char module[MAX_PATH];
|
||||||
|
};
|
||||||
|
|
||||||
|
static BOOL CALLBACK enum_modW64_32(PWSTR name, DWORD64 base, PVOID user)
|
||||||
|
{
|
||||||
|
struct enum_modW64_32* x = user;
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, name, -1, x->module, sizeof(x->module), NULL, NULL);
|
||||||
|
return x->cb(x->module, (DWORD)base, x->user);
|
||||||
|
}
|
||||||
|
|
||||||
BOOL WINAPI SymEnumerateModules(HANDLE hProcess,
|
BOOL WINAPI SymEnumerateModules(HANDLE hProcess,
|
||||||
PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
|
PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
|
||||||
PVOID UserContext)
|
PVOID UserContext)
|
||||||
{
|
{
|
||||||
struct process* pcs = process_find_by_handle(hProcess);
|
struct enum_modW64_32 x;
|
||||||
struct module* module;
|
|
||||||
|
|
||||||
if (!pcs) return FALSE;
|
x.cb = EnumModulesCallback;
|
||||||
|
x.user = UserContext;
|
||||||
for (module = pcs->lmodules; module; module = module->next)
|
|
||||||
{
|
return SymEnumerateModulesW64(hProcess, enum_modW64_32, &x);
|
||||||
if (!(dbghelp_options & SYMOPT_WINE_WITH_ELF_MODULES) && module->type == DMT_ELF)
|
|
||||||
continue;
|
|
||||||
if (!EnumModulesCallback(module->module_name,
|
|
||||||
module->module.BaseOfImage, UserContext))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* SymEnumerateModules64 (DBGHELP.@)
|
* SymEnumerateModules64 (DBGHELP.@)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
struct enum_modW64_64
|
||||||
|
{
|
||||||
|
PSYM_ENUMMODULES_CALLBACK64 cb;
|
||||||
|
PVOID user;
|
||||||
|
char module[MAX_PATH];
|
||||||
|
};
|
||||||
|
|
||||||
|
static BOOL CALLBACK enum_modW64_64(PWSTR name, DWORD64 base, PVOID user)
|
||||||
|
{
|
||||||
|
struct enum_modW64_64* x = user;
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, name, -1, x->module, sizeof(x->module), NULL, NULL);
|
||||||
|
return x->cb(x->module, base, x->user);
|
||||||
|
}
|
||||||
|
|
||||||
BOOL WINAPI SymEnumerateModules64(HANDLE hProcess,
|
BOOL WINAPI SymEnumerateModules64(HANDLE hProcess,
|
||||||
PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,
|
PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,
|
||||||
PVOID UserContext)
|
PVOID UserContext)
|
||||||
|
{
|
||||||
|
struct enum_modW64_64 x;
|
||||||
|
|
||||||
|
x.cb = EnumModulesCallback;
|
||||||
|
x.user = UserContext;
|
||||||
|
|
||||||
|
return SymEnumerateModulesW64(hProcess, enum_modW64_64, &x);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************
|
||||||
|
* SymEnumerateModulesW64 (DBGHELP.@)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL WINAPI SymEnumerateModulesW64(HANDLE hProcess,
|
||||||
|
PSYM_ENUMMODULES_CALLBACKW64 EnumModulesCallback,
|
||||||
|
PVOID UserContext)
|
||||||
{
|
{
|
||||||
struct process* pcs = process_find_by_handle(hProcess);
|
struct process* pcs = process_find_by_handle(hProcess);
|
||||||
struct module* module;
|
struct module* module;
|
||||||
|
@ -669,7 +707,7 @@ BOOL WINAPI SymEnumerateModules64(HANDLE hProcess,
|
||||||
{
|
{
|
||||||
if (!(dbghelp_options & SYMOPT_WINE_WITH_ELF_MODULES) && module->type == DMT_ELF)
|
if (!(dbghelp_options & SYMOPT_WINE_WITH_ELF_MODULES) && module->type == DMT_ELF)
|
||||||
continue;
|
continue;
|
||||||
if (!EnumModulesCallback(module->module_name,
|
if (!EnumModulesCallback(module->module.ModuleName,
|
||||||
module->module.BaseOfImage, UserContext))
|
module->module.BaseOfImage, UserContext))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -764,6 +764,8 @@ typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PSTR, ULONG, PVOID);
|
||||||
BOOL WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
|
BOOL WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
|
||||||
typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PSTR, DWORD64, PVOID);
|
typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PSTR, DWORD64, PVOID);
|
||||||
BOOL WINAPI SymEnumerateModules64(HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID);
|
BOOL WINAPI SymEnumerateModules64(HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID);
|
||||||
|
typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PWSTR, DWORD64, PVOID);
|
||||||
|
BOOL WINAPI SymEnumerateModulesW64(HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID);
|
||||||
BOOL WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);
|
BOOL WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);
|
||||||
BOOL WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW);
|
BOOL WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW);
|
||||||
BOOL WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64);
|
BOOL WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64);
|
||||||
|
|
Loading…
Reference in a new issue