diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec index cff2ab7efb3..ae911b7db02 100644 --- a/dlls/dbghelp/dbghelp.spec +++ b/dlls/dbghelp/dbghelp.spec @@ -86,7 +86,7 @@ @ stub SymSetSymWithAddr64 @ stub SymUnDName64 @ stdcall SymUnDName(ptr str long) -@ stub SymUnloadModule64 +@ stdcall SymUnloadModule64(long double) @ stdcall SymUnloadModule(long long) @ stdcall UnDecorateSymbolName(str str long long) @ stdcall UnmapDebugInformation(ptr) diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c index 18e01629bff..e39f431c7b8 100644 --- a/dlls/dbghelp/module.c +++ b/dlls/dbghelp/module.c @@ -446,6 +446,23 @@ BOOL WINAPI SymUnloadModule(HANDLE hProcess, DWORD BaseOfDll) return module_remove(pcs, module); } +/****************************************************************** + * SymUnloadModule64 (DBGHELP.@) + * + */ +BOOL WINAPI SymUnloadModule64(HANDLE hProcess, DWORD64 BaseOfDll) +{ + struct process* pcs; + struct module* module; + + pcs = process_find_by_handle(hProcess); + if (!pcs) return FALSE; + if (!validate_addr64(BaseOfDll)) return FALSE; + module = module_find_by_addr(pcs, (DWORD)BaseOfDll, DMT_UNKNOWN); + if (!module) return FALSE; + return module_remove(pcs, module); +} + /****************************************************************** * SymEnumerateModules (DBGHELP.@) * diff --git a/include/dbghelp.h b/include/dbghelp.h index 734af1576b3..044e2bf324c 100644 --- a/include/dbghelp.h +++ b/include/dbghelp.h @@ -617,6 +617,7 @@ DWORD WINAPI SymLoadModule(HANDLE, HANDLE, PSTR, PSTR, DWORD, DWORD); DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD); BOOL WINAPI SymUnloadModule(HANDLE, DWORD); +BOOL WINAPI SymUnloadModule64(HANDLE, DWORD64); /************************* * Symbol Handling *