Stefan Leichter <Stefan.Leichter(a)camline.com> writes:
/****************************************************************** + * QueryFullProcessImageNameA (KERNEL32.@) + */ +BOOL WINAPI QueryFullProcessImageNameA(HANDLE hProcess, DWORD dwFlags, LPSTR lpExeName, PDWORD pdwSize) +{ + BOOL retval; + DWORD pdwSizeW = *pdwSize; + LPWSTR lpExeNameW = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, *pdwSize * sizeof(WCHAR)); + + retval = QueryFullProcessImageNameW(hProcess, dwFlags, lpExeNameW, &pdwSizeW); + + if(retval) { + if(lpExeName) + *pdwSize = FILE_name_WtoA(lpExeNameW, pdwSizeW, lpExeName, *pdwSize); + else { + /* this is a difference between the acsii and the unicode version (vista) + * the unicode version crashes when the size is big enough to hold the result + * ascii version throughs an error + */ + retval = FALSE; + SetLastError(ERROR_INVALID_PARAMETER); + } + }
I'd expect that error to be a side effect of WideCharToMultiByte, which is most likely what you want to use here. Also you have to handle buffer overflows correctly, with test cases. -- Alexandre Julliard julliard(a)winehq.org