diff --git a/patches/ntdll-NtQueryVirtualMemory/0007-kernel32-Implement-K32GetMappedFileName.-v2.patch b/patches/ntdll-NtQueryVirtualMemory/0007-kernel32-Implement-K32GetMappedFileName.-v2.patch deleted file mode 100644 index 15ecef95..00000000 --- a/patches/ntdll-NtQueryVirtualMemory/0007-kernel32-Implement-K32GetMappedFileName.-v2.patch +++ /dev/null @@ -1,242 +0,0 @@ -From c56c02183daf0cc5c15e5bfde75e87aa46dcd846 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Wed, 16 Mar 2016 20:23:28 +0800 -Subject: [PATCH] kernel32: Implement K32GetMappedFileName. (v2) - ---- - dlls/kernelbase/debug.c | 87 ++++++++++++++++++++++++++++++++--- - dlls/psapi/tests/psapi_main.c | 22 ++------- - 2 files changed, 85 insertions(+), 24 deletions(-) - -diff --git a/dlls/kernelbase/debug.c b/dlls/kernelbase/debug.c -index 0a3bf397725f..aa8d9596acc1 100644 ---- a/dlls/kernelbase/debug.c -+++ b/dlls/kernelbase/debug.c -@@ -1248,15 +1248,59 @@ DWORD WINAPI DECLSPEC_HOTPATCH K32GetDeviceDriverFileNameW( void *image_base, WC - return 0; - } - -+static DWORD FILE_name_WtoA( LPCWSTR src, INT srclen, LPSTR dest, INT destlen ) -+{ -+ DWORD ret; -+ -+ if (srclen < 0) srclen = lstrlenW( src ) + 1; -+ if (!destlen) -+ { -+ if (!AreFileApisANSI()) -+ { -+ UNICODE_STRING strW; -+ strW.Buffer = (WCHAR *)src; -+ strW.Length = srclen * sizeof(WCHAR); -+ ret = RtlUnicodeStringToOemSize( &strW ) - 1; -+ } -+ else -+ RtlUnicodeToMultiByteSize( &ret, src, srclen * sizeof(WCHAR) ); -+ } -+ else -+ { -+ if (!AreFileApisANSI()) -+ RtlUnicodeToOemN( dest, destlen, &ret, src, srclen * sizeof(WCHAR) ); -+ else -+ RtlUnicodeToMultiByteN( dest, destlen, &ret, src, srclen * sizeof(WCHAR) ); -+ } -+ return ret; -+} - - /*********************************************************************** - * K32GetMappedFileNameA (kernelbase.@) - */ - DWORD WINAPI DECLSPEC_HOTPATCH K32GetMappedFileNameA( HANDLE process, void *addr, char *name, DWORD size ) - { -- FIXME( "(%p, %p, %p, %d): stub\n", process, addr, name, size ); -- if (name && size) name[0] = 0; -- return 0; -+ WCHAR file_nameW[MAX_PATH]; -+ DWORD ret; -+ -+ TRACE("(%p, %p, %p, %d)\n", process, addr, name, size); -+ -+ if (!name || !size) -+ { -+ SetLastError(ERROR_INVALID_PARAMETER); -+ return 0; -+ } -+ -+ ret = K32GetMappedFileNameW(process, addr, file_nameW, MAX_PATH); -+ if (ret) -+ { -+ ret = FILE_name_WtoA(file_nameW, -1, name, size); -+ if (ret > 1) -+ ret--; /* don't account for terminating NUL */ -+ else -+ name[0] = 0; -+ } -+ return ret; - } - - -@@ -1265,9 +1309,40 @@ DWORD WINAPI DECLSPEC_HOTPATCH K32GetMappedFileNameA( HANDLE process, void *addr - */ - DWORD WINAPI DECLSPEC_HOTPATCH K32GetMappedFileNameW( HANDLE process, void *addr, WCHAR *name, DWORD size ) - { -- FIXME( "(%p, %p, %p, %d): stub\n", process, addr, name, size ); -- if (name && size) name[0] = 0; -- return 0; -+ MEMORY_SECTION_NAME *section; -+ SIZE_T buf_len; -+ NTSTATUS status; -+ -+ TRACE("(%p, %p, %p, %d)\n", process, addr, name, size); -+ -+ if (!name || !size) -+ { -+ SetLastError(ERROR_INVALID_PARAMETER); -+ return 0; -+ } -+ -+ buf_len = sizeof(*section) + size * sizeof(WCHAR); -+ section = HeapAlloc(GetProcessHeap(), 0, buf_len); -+ if (!section) -+ { -+ SetLastError(ERROR_NOT_ENOUGH_MEMORY); -+ return 0; -+ } -+ -+ status = NtQueryVirtualMemory(process, addr, MemorySectionName, section, buf_len, &buf_len); -+ if (status) -+ { -+ HeapFree(GetProcessHeap(), 0, section); -+ SetLastError(RtlNtStatusToDosError(status)); -+ return 0; -+ } -+ -+ memcpy(name, section->SectionFileName.Buffer, section->SectionFileName.MaximumLength); -+ buf_len = section->SectionFileName.Length; -+ -+ HeapFree(GetProcessHeap(), 0, section); -+ -+ return buf_len; - } - - -diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c -index 40fd08e6adbc..dc19bed27d66 100644 ---- a/dlls/psapi/tests/psapi_main.c -+++ b/dlls/psapi/tests/psapi_main.c -@@ -418,27 +418,22 @@ static void test_GetMappedFileName(void) - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(NULL, hMod, szMapPath, sizeof(szMapPath)); - ok(!ret, "GetMappedFileName should fail\n"); --todo_wine - ok(GetLastError() == ERROR_INVALID_HANDLE, "expected error=ERROR_INVALID_HANDLE but got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(hpSR, hMod, szMapPath, sizeof(szMapPath)); - ok(!ret, "GetMappedFileName should fail\n"); --todo_wine - ok(GetLastError() == ERROR_ACCESS_DENIED, "expected error=ERROR_ACCESS_DENIED but got %d\n", GetLastError()); - - SetLastError( 0xdeadbeef ); - ret = GetMappedFileNameA(hpQI, hMod, szMapPath, sizeof(szMapPath)); --todo_wine - ok( ret || broken(GetLastError() == ERROR_UNEXP_NET_ERR), /* win2k */ - "GetMappedFileNameA failed with error %u\n", GetLastError() ); - if (ret) - { - ok(ret == strlen(szMapPath), "szMapPath=\"%s\" ret=%d\n", szMapPath, ret); -- todo_wine - ok(szMapPath[0] == '\\', "szMapPath=\"%s\"\n", szMapPath); - szMapBaseName = strrchr(szMapPath, '\\'); /* That's close enough for us */ -- todo_wine - ok(szMapBaseName && *szMapBaseName, "szMapPath=\"%s\"\n", szMapPath); - if (szMapBaseName) - { -@@ -476,29 +471,25 @@ todo_wine - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(GetCurrentProcess(), base, map_name, 0); - ok(!ret, "GetMappedFileName should fail\n"); --todo_wine - ok(GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "wrong error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(GetCurrentProcess(), base, 0, sizeof(map_name)); - ok(!ret, "GetMappedFileName should fail\n"); --todo_wine - ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(GetCurrentProcess(), base, map_name, 1); --todo_wine - ok(ret == 1, "GetMappedFileName error %d\n", GetLastError()); - ok(!map_name[0] || broken(map_name[0] == device_name[0]) /* before win2k */, "expected 0, got %c\n", map_name[0]); - - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(GetCurrentProcess(), base, map_name, sizeof(map_name)); --todo_wine { - ok(ret, "GetMappedFileName error %d\n", GetLastError()); - ok(ret > strlen(device_name), "map_name should be longer than device_name\n"); -+todo_wine - ok(memcmp(map_name, device_name, strlen(device_name)) == 0, "map name does not start with a device name: %s\n", map_name); --} - - SetLastError(0xdeadbeef); - ret = GetMappedFileNameW(GetCurrentProcess(), base, map_nameW, ARRAY_SIZE(map_nameW)); -@@ -516,10 +507,9 @@ todo_wine - - SetLastError(0xdeadbeef); - ret = GetMappedFileNameW(current_process, base, map_nameW, sizeof(map_nameW)/sizeof(map_nameW[0])); --todo_wine { - ok(ret, "GetMappedFileNameW error %d\n", GetLastError()); - ok(ret > strlen(device_name), "map_name should be longer than device_name\n"); --} -+ - if (nt_get_mapped_file_name(current_process, base, nt_map_name, sizeof(nt_map_name)/sizeof(nt_map_name[0]))) - { - ok(memcmp(map_nameW, nt_map_name, lstrlenW(map_nameW)) == 0, "map name does not start with a device name: %s\n", map_name); -@@ -530,16 +520,14 @@ todo_wine - - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(GetCurrentProcess(), base + 0x2000, map_name, sizeof(map_name)); --todo_wine { - ok(ret, "GetMappedFileName error %d\n", GetLastError()); - ok(ret > strlen(device_name), "map_name should be longer than device_name\n"); -+todo_wine - ok(memcmp(map_name, device_name, strlen(device_name)) == 0, "map name does not start with a device name: %s\n", map_name); --} - - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(GetCurrentProcess(), base + 0x4000, map_name, sizeof(map_name)); - ok(!ret, "GetMappedFileName should fail\n"); --todo_wine - ok(GetLastError() == ERROR_UNEXP_NET_ERR, "expected ERROR_UNEXP_NET_ERR, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); -@@ -551,7 +539,6 @@ todo_wine - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(0, base, map_name, sizeof(map_name)); - ok(!ret, "GetMappedFileName should fail\n"); --todo_wine - ok(GetLastError() == ERROR_INVALID_HANDLE, "expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - UnmapViewOfFile(base); -@@ -570,7 +557,6 @@ todo_wine - SetLastError(0xdeadbeef); - ret = GetMappedFileNameA(GetCurrentProcess(), base, map_name, sizeof(map_name)); - ok(!ret, "GetMappedFileName should fail\n"); --todo_wine - ok(GetLastError() == ERROR_FILE_INVALID, "expected ERROR_FILE_INVALID, got %d\n", GetLastError()); - - CloseHandle(current_process); -@@ -617,7 +603,7 @@ static void test_GetProcessImageFileName(void) - if(ret && ret1) - { - /* Windows returns 2*strlen-1 */ -- todo_wine ok(ret >= strlen(szImgPath), "szImgPath=\"%s\" ret=%d\n", szImgPath, ret); -+ ok(ret >= strlen(szImgPath), "szImgPath=\"%s\" ret=%d\n", szImgPath, ret); - todo_wine ok(!strcmp(szImgPath, szMapPath), "szImgPath=\"%s\" szMapPath=\"%s\"\n", szImgPath, szMapPath); - } - --- -2.29.2 -