Module: wine Branch: master Commit: 9bbf3f90752afe127f69bb89d62bd5849d2774d7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9bbf3f90752afe127f69bb89d6...
Author: Jacek Caban jacek@codeweavers.com Date: Thu May 12 12:23:22 2011 +0000
kernel32: Moved GetModuleFileNameEx[AW] to kernel32.
---
dlls/kernel32/kernel32.spec | 2 + dlls/kernel32/module.c | 55 ++++++++++++++++++++++++++++++++++++++++++ dlls/psapi/psapi.spec | 4 +- dlls/psapi/psapi_main.c | 56 ------------------------------------------- 4 files changed, 59 insertions(+), 58 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 4da6f06..3f85557 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -774,6 +774,8 @@ @ stdcall K32EnumProcesses(ptr long ptr) @ stdcall K32GetModuleBaseNameA(long long ptr long) @ stdcall K32GetModuleBaseNameW(long long ptr long) +@ stdcall K32GetModuleFileNameExA(long long ptr long) +@ stdcall K32GetModuleFileNameExW(long long ptr long) @ stdcall K32GetProcessMemoryInfo(long ptr long) @ stdcall K32QueryWorkingSet(long ptr long) @ stdcall K32QueryWorkingSetEx(long ptr long) diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c index 4e2c098..94d20c3 100644 --- a/dlls/kernel32/module.c +++ b/dlls/kernel32/module.c @@ -1228,6 +1228,61 @@ DWORD WINAPI K32GetModuleBaseNameA(HANDLE process, HMODULE module, return ret; }
+/*********************************************************************** + * K32GetModuleFileNameExW (KERNEL32.@) + */ +DWORD WINAPI K32GetModuleFileNameExW(HANDLE process, HMODULE module, + LPWSTR file_name, DWORD size) +{ + LDR_MODULE ldr_module; + + if(!get_ldr_module(process, module, &ldr_module)) + return 0; + + size = min(ldr_module.FullDllName.Length / sizeof(WCHAR), size); + if (!ReadProcessMemory(process, ldr_module.FullDllName.Buffer, + file_name, size * sizeof(WCHAR), NULL)) + return 0; + + file_name[size] = 0; + return size; +} + +/*********************************************************************** + * K32GetModuleFileNameExA (KERNEL32.@) + */ +DWORD WINAPI K32GetModuleFileNameExA(HANDLE process, HMODULE module, + LPSTR file_name, DWORD size) +{ + WCHAR *ptr; + + TRACE("(hProcess=%p, hModule=%p, %p, %d)\n", process, module, file_name, size); + + if (!file_name || !size) return 0; + + if ( process == GetCurrentProcess() ) + { + DWORD len = GetModuleFileNameA( module, file_name, size ); + if (size) file_name[size - 1] = '\0'; + return len; + } + + if (!(ptr = HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR)))) return 0; + + if (!K32GetModuleFileNameExW(process, module, ptr, size)) + { + file_name[0] = '\0'; + } + else + { + if (!WideCharToMultiByte( CP_ACP, 0, ptr, -1, file_name, size, NULL, NULL )) + file_name[size - 1] = 0; + } + + HeapFree(GetProcessHeap(), 0, ptr); + return strlen(file_name); +} + #ifdef __i386__
/*********************************************************************** diff --git a/dlls/psapi/psapi.spec b/dlls/psapi/psapi.spec index 07e0cb5..0427891 100644 --- a/dlls/psapi/psapi.spec +++ b/dlls/psapi/psapi.spec @@ -12,8 +12,8 @@ @ stdcall GetMappedFileNameW(long ptr ptr long) @ stdcall GetModuleBaseNameA(long long ptr long) kernel32.K32GetModuleBaseNameA @ stdcall GetModuleBaseNameW(long long ptr long) kernel32.K32GetModuleBaseNameW -@ stdcall GetModuleFileNameExA(long long ptr long) -@ stdcall GetModuleFileNameExW(long long ptr long) +@ stdcall GetModuleFileNameExA(long long ptr long) kernel32.K32GetModuleFileNameExA +@ stdcall GetModuleFileNameExW(long long ptr long) kernel32.K32GetModuleFileNameExW @ stdcall GetModuleInformation(long long ptr long) @ stdcall GetPerformanceInfo(ptr long) @ stdcall GetProcessImageFileNameA(long ptr long) kernel32.K32GetProcessImageFileNameA diff --git a/dlls/psapi/psapi_main.c b/dlls/psapi/psapi_main.c index a2d7ac4..b4cabca 100644 --- a/dlls/psapi/psapi_main.c +++ b/dlls/psapi/psapi_main.c @@ -263,62 +263,6 @@ DWORD WINAPI GetMappedFileNameW(HANDLE hProcess, LPVOID lpv, LPWSTR lpFilename, }
/*********************************************************************** - * GetModuleFileNameExA (PSAPI.@) - */ -DWORD WINAPI GetModuleFileNameExA(HANDLE hProcess, HMODULE hModule, - LPSTR lpFileName, DWORD nSize) -{ - WCHAR *ptr; - - TRACE("(hProcess=%p, hModule=%p, %p, %d)\n", - hProcess, hModule, lpFileName, nSize); - - if (!lpFileName || !nSize) return 0; - - if ( hProcess == GetCurrentProcess() ) - { - DWORD len = GetModuleFileNameA( hModule, lpFileName, nSize ); - if (nSize) lpFileName[nSize - 1] = '\0'; - return len; - } - - if (!(ptr = HeapAlloc(GetProcessHeap(), 0, nSize * sizeof(WCHAR)))) return 0; - - if (!GetModuleFileNameExW(hProcess, hModule, ptr, nSize)) - { - lpFileName[0] = '\0'; - } - else - { - if (!WideCharToMultiByte( CP_ACP, 0, ptr, -1, lpFileName, nSize, NULL, NULL )) - lpFileName[nSize - 1] = 0; - } - - HeapFree(GetProcessHeap(), 0, ptr); - return strlen(lpFileName); -} - -/*********************************************************************** - * GetModuleFileNameExW (PSAPI.@) - */ -DWORD WINAPI GetModuleFileNameExW(HANDLE hProcess, HMODULE hModule, - LPWSTR lpFileName, DWORD nSize) -{ - LDR_MODULE LdrModule; - - if(!PSAPI_GetLdrModule(hProcess, hModule, &LdrModule)) - return 0; - - nSize = min(LdrModule.FullDllName.Length / sizeof(WCHAR), nSize); - if (!ReadProcessMemory(hProcess, LdrModule.FullDllName.Buffer, - lpFileName, nSize * sizeof(WCHAR), NULL)) - return 0; - - lpFileName[nSize] = 0; - return nSize; -} - -/*********************************************************************** * GetModuleInformation (PSAPI.@) */ BOOL WINAPI GetModuleInformation(HANDLE hProcess, HMODULE hModule,