ChangeSet ID: 21543 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/29 05:08:28
Modified files: dlls/dbghelp : dbghelp.spec module.c include : dbghelp.h
Log message: Eric Pouech eric.pouech@wanadoo.fr Implemented SymGetModuleInfo64.
Patch: http://cvs.winehq.org/patch.py?id=21543
Old revision New revision Changes Path 1.15 1.16 +1 -1 wine/dlls/dbghelp/dbghelp.spec 1.15 1.16 +55 -0 wine/dlls/dbghelp/module.c 1.20 1.21 +30 -1 wine/include/dbghelp.h
Index: wine/dlls/dbghelp/dbghelp.spec diff -u -p wine/dlls/dbghelp/dbghelp.spec:1.15 wine/dlls/dbghelp/dbghelp.spec:1.16 --- wine/dlls/dbghelp/dbghelp.spec:1.15 29 Nov 2005 11: 8:28 -0000 +++ wine/dlls/dbghelp/dbghelp.spec 29 Nov 2005 11: 8:28 -0000 @@ -53,7 +53,7 @@ @ stdcall SymGetLinePrev(long ptr) @ stub SymGetModuleBase64 @ stdcall SymGetModuleBase(long long) -@ stub SymGetModuleInfo64 +@ stdcall SymGetModuleInfo64(long double ptr) @ stdcall SymGetModuleInfo(long long ptr) @ stub SymGetModuleInfoW64 @ stub SymGetModuleInfoW Index: wine/dlls/dbghelp/module.c diff -u -p wine/dlls/dbghelp/module.c:1.15 wine/dlls/dbghelp/module.c:1.16 --- wine/dlls/dbghelp/module.c:1.15 29 Nov 2005 11: 8:28 -0000 +++ wine/dlls/dbghelp/module.c 29 Nov 2005 11: 8:28 -0000 @@ -551,6 +551,61 @@ BOOL WINAPI SymGetModuleInfo(HANDLE hPr return TRUE; }
+/****************************************************************** + * SymGetModuleInfo64 (DBGHELP.@) + * + */ +BOOL WINAPI SymGetModuleInfo64(HANDLE hProcess, DWORD64 dwAddr, + PIMAGEHLP_MODULE64 ModuleInfo) +{ + struct process* pcs = process_find_by_handle(hProcess); + struct module* module; + DWORD sz; + IMAGEHLP_MODULE64 mod; + + TRACE("%p %s %p\n", hProcess, wine_dbgstr_longlong(dwAddr), ModuleInfo); + + if (!pcs) return FALSE; + if (ModuleInfo->SizeOfStruct > sizeof(*ModuleInfo)) return FALSE; + module = module_find_by_addr(pcs, dwAddr, DMT_UNKNOWN); + if (!module) return FALSE; + + mod.BaseOfImage = module->module.BaseOfImage; + mod.ImageSize = module->module.ImageSize; + mod.TimeDateStamp = module->module.TimeDateStamp; + mod.CheckSum = module->module.CheckSum; + mod.NumSyms = module->module.NumSyms; + mod.SymType = module->module.SymType; + strcpy(mod.ModuleName, module->module.ModuleName); + strcpy(mod.ImageName, module->module.ImageName); + strcpy(mod.LoadedImageName, module->module.LoadedImageName); + /* FIXME: all following attributes need to be set */ + mod.LoadedPdbName[0] = '\0'; + mod.CVSig = 0; + memset(mod.CVData, 0, sizeof(mod.CVData)); + mod.PdbSig = 0; + memset(&mod.PdbSig70, 0, sizeof(mod.PdbSig70)); + mod.PdbAge = 0; + mod.PdbUnmatched = 0; + mod.DbgUnmatched = 0; + mod.LineNumbers = 0; + mod.GlobalSymbols = 0; + mod.TypeInfo = 0; + mod.SourceIndexed = 0; + mod.Publics = 0; + + if (module->module.SymType == SymNone) + { + module = module_get_container(pcs, module); + if (module && module->module.SymType != SymNone) + mod.SymType = module->module.SymType; + } + sz = ModuleInfo->SizeOfStruct; + memcpy(ModuleInfo, &mod, sz); + ModuleInfo->SizeOfStruct = sz; + return TRUE; +} + /*********************************************************************** * SymGetModuleBase (IMAGEHLP.@) */ Index: wine/include/dbghelp.h diff -u -p wine/include/dbghelp.h:1.20 wine/include/dbghelp.h:1.21 --- wine/include/dbghelp.h:1.20 29 Nov 2005 11: 8:28 -0000 +++ wine/include/dbghelp.h 29 Nov 2005 11: 8:28 -0000 @@ -113,7 +113,8 @@ typedef struct _IMAGEHLP_MODULE CHAR LoadedImageName[256]; } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
-typedef struct _IMAGEHLP_MODULEW { +typedef struct _IMAGEHLP_MODULEW +{ DWORD SizeOfStruct; DWORD BaseOfImage; DWORD ImageSize; @@ -126,6 +127,33 @@ typedef struct _IMAGEHLP_MODULEW { WCHAR LoadedImageName[256]; } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
+typedef struct _IMAGEHLP_MODULE64 +{ + DWORD SizeOfStruct; + DWORD64 BaseOfImage; + DWORD ImageSize; + DWORD TimeDateStamp; + DWORD CheckSum; + DWORD NumSyms; + SYM_TYPE SymType; + CHAR ModuleName[32]; + CHAR ImageName[256]; + CHAR LoadedImageName[256]; + CHAR LoadedPdbName[256]; + DWORD CVSig; + CHAR CVData[MAX_PATH*3]; + DWORD PdbSig; + GUID PdbSig70; + DWORD PdbAge; + BOOL PdbUnmatched; + BOOL DbgUnmatched; + BOOL LineNumbers; + BOOL GlobalSymbols; + BOOL TypeInfo; + BOOL SourceIndexed; + BOOL Publics; +} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; + typedef struct _IMAGEHLP_LINE { DWORD SizeOfStruct; @@ -612,6 +640,7 @@ typedef BOOL (CALLBACK *PSYM_ENUMMODULES BOOL WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID); BOOL WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE); BOOL WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW); +BOOL WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64); DWORD WINAPI SymGetModuleBase(HANDLE, DWORD); DWORD WINAPI SymLoadModule(HANDLE, HANDLE, PSTR, PSTR, DWORD, DWORD); DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD,