From d2d85a1b46f00764e434934db0f9a14e51c29261 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Wed, 10 May 2006 21:35:18 +0200 Subject: [PATCH] dbghelp: Implemented SymGetModuleInfoW and SymGetModuleInfoW64. --- dlls/dbghelp/dbghelp.spec | 4 +- dlls/dbghelp/module.c | 81 +++++++++++++++++++++++++++++++++++++++ include/dbghelp.h | 2 +- 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec index 1f753db2afc..9ec1802df54 100644 --- a/dlls/dbghelp/dbghelp.spec +++ b/dlls/dbghelp/dbghelp.spec @@ -83,8 +83,8 @@ @ stdcall SymGetModuleBase64(long double) @ stdcall SymGetModuleInfo(long long ptr) @ stdcall SymGetModuleInfo64(long double ptr) -@ stub SymGetModuleInfoW -@ stub SymGetModuleInfoW64 +@ stdcall SymGetModuleInfoW(long long ptr) +@ stdcall SymGetModuleInfoW64(long double ptr) @ stub SymGetOmapBlockBase @ stdcall SymGetOptions() @ stub SymGetScope diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c index 6cc6c066794..26b847a25b8 100644 --- a/dlls/dbghelp/module.c +++ b/dlls/dbghelp/module.c @@ -660,6 +660,39 @@ BOOL WINAPI SymGetModuleInfo(HANDLE hProcess, DWORD dwAddr, return TRUE; } +/****************************************************************** + * SymGetModuleInfoW (DBGHELP.@) + * + */ +BOOL WINAPI SymGetModuleInfoW(HANDLE hProcess, DWORD dwAddr, + PIMAGEHLP_MODULEW ModuleInfo) +{ + IMAGEHLP_MODULE mi; + IMAGEHLP_MODULEW miw; + + if (sizeof(miw) < ModuleInfo->SizeOfStruct) FIXME("Wrong size\n"); + + mi.SizeOfStruct = sizeof(mi); + if (!SymGetModuleInfo(hProcess, dwAddr, &mi)) return FALSE; + + miw.SizeOfStruct = mi.SizeOfStruct; + miw.BaseOfImage = mi.BaseOfImage; + miw.ImageSize = mi.ImageSize; + miw.TimeDateStamp = mi.TimeDateStamp; + miw.CheckSum = mi.CheckSum; + miw.NumSyms = mi.NumSyms; + miw.SymType = mi.SymType; + MultiByteToWideChar(CP_ACP, 0, mi.ModuleName, -1, + miw.ModuleName, sizeof(miw.ModuleName) / sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, mi.ImageName, -1, + miw.ImageName, sizeof(miw.ImageName) / sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, mi.LoadedImageName, -1, + miw.LoadedImageName, sizeof(miw.LoadedImageName) / sizeof(WCHAR)); + memcpy(ModuleInfo, &miw, ModuleInfo->SizeOfStruct); + + return TRUE; +} + /****************************************************************** * SymGetModuleInfo64 (DBGHELP.@) * @@ -720,6 +753,54 @@ BOOL WINAPI SymGetModuleInfo64(HANDLE hProcess, DWORD64 dwAddr, return TRUE; } +/****************************************************************** + * SymGetModuleInfoW64 (DBGHELP.@) + * + */ +BOOL WINAPI SymGetModuleInfoW64(HANDLE hProcess, DWORD64 dwAddr, + PIMAGEHLP_MODULEW64 ModuleInfo) +{ + IMAGEHLP_MODULE64 mi; + IMAGEHLP_MODULEW64 miw; + + if (sizeof(miw) < ModuleInfo->SizeOfStruct) FIXME("Wrong size\n"); + + mi.SizeOfStruct = sizeof(mi); + if (!SymGetModuleInfo64(hProcess, dwAddr, &mi)) return FALSE; + + miw.SizeOfStruct = mi.SizeOfStruct; + miw.BaseOfImage = mi.BaseOfImage; + miw.ImageSize = mi.ImageSize; + miw.TimeDateStamp = mi.TimeDateStamp; + miw.CheckSum = mi.CheckSum; + miw.NumSyms = mi.NumSyms; + miw.SymType = mi.SymType; + MultiByteToWideChar(CP_ACP, 0, mi.ModuleName, -1, + miw.ModuleName, sizeof(miw.ModuleName) / sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, mi.ImageName, -1, + miw.ImageName, sizeof(miw.ImageName) / sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, mi.LoadedImageName, -1, + miw.LoadedImageName, sizeof(miw.LoadedImageName) / sizeof(WCHAR)); + + miw.CVSig = mi.CVSig; + MultiByteToWideChar(CP_ACP, 0, mi.CVData, -1, + miw.CVData, sizeof(miw.CVData) / sizeof(WCHAR)); + miw.PdbSig = mi.PdbSig; + miw.PdbSig70 = mi.PdbSig70; + miw.PdbAge = mi.PdbAge; + miw.PdbUnmatched = mi.PdbUnmatched; + miw.DbgUnmatched = mi.DbgUnmatched; + miw.LineNumbers = mi.LineNumbers; + miw.GlobalSymbols = mi.GlobalSymbols; + miw.TypeInfo = mi.TypeInfo; + miw.SourceIndexed = mi.SourceIndexed; + miw.Publics = mi.Publics; + + memcpy(ModuleInfo, &miw, ModuleInfo->SizeOfStruct); + + return TRUE; +} + /*********************************************************************** * SymGetModuleBase (DBGHELP.@) */ diff --git a/include/dbghelp.h b/include/dbghelp.h index 45916c1d879..b6ceaa8dac2 100644 --- a/include/dbghelp.h +++ b/include/dbghelp.h @@ -172,7 +172,7 @@ typedef struct _IMAGEHLP_MODULE64 BOOL Publics; } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; -typedef struct _IMAGEHLP_MODULE64W +typedef struct _IMAGEHLP_MODULEW64 { DWORD SizeOfStruct; DWORD64 BaseOfImage;