kernel32: Forward K32GetMappedFileName to ntdll.

Dmitry Timoshkov dmitry at baikal.ru
Mon Jan 30 01:49:46 CST 2012


---
 dlls/kernel32/virtual.c       |   35 +++++++++++++++++++++++------------
 dlls/ntdll/virtual.c          |   35 +++++++++++++++++++++++------------
 dlls/psapi/tests/psapi_main.c |    7 ++++---
 3 files changed, 50 insertions(+), 27 deletions(-)

diff --git a/dlls/kernel32/virtual.c b/dlls/kernel32/virtual.c
index bddd638..0358cfa 100644
--- a/dlls/kernel32/virtual.c
+++ b/dlls/kernel32/virtual.c
@@ -830,27 +830,38 @@ BOOL WINAPI IsBadStringPtrW( LPCWSTR str, UINT max )
 }
 
 /***********************************************************************
- *           K32GetMappedFileNameA (KERNEL32.@)
+ *           K32GetMappedFileNameW (KERNEL32.@)
  */
-DWORD WINAPI K32GetMappedFileNameA(HANDLE process, LPVOID lpv, LPSTR file_name, DWORD size)
+DWORD WINAPI K32GetMappedFileNameW(HANDLE process, LPVOID addr, LPWSTR name, DWORD len)
 {
-    FIXME_(file)("(%p, %p, %p, %d): stub\n", process, lpv, file_name, size);
-
-    if (file_name && size)
-        file_name[0] = '\0';
+    SIZE_T ret;
+    NTSTATUS status;
 
-    return 0;
+    if ((status = NtQueryVirtualMemory( process, addr, MemorySectionName, name, len, &ret )))
+    {
+        SetLastError( RtlNtStatusToDosError(status) );
+        ret = 0;
+    }
+    return ret;
 }
 
 /***********************************************************************
- *           K32GetMappedFileNameW (KERNEL32.@)
+ *           K32GetMappedFileNameA (KERNEL32.@)
  */
-DWORD WINAPI K32GetMappedFileNameW(HANDLE process, LPVOID lpv, LPWSTR file_name, DWORD size)
+DWORD WINAPI K32GetMappedFileNameA(HANDLE process, LPVOID addr, LPSTR name, DWORD len)
 {
-    FIXME_(file)("(%p, %p, %p, %d): stub\n", process, lpv, file_name, size);
+    WCHAR nameW[MAX_PATH];
+    DWORD ret;
+
+    if (!name || !len)
+    {
+        SetLastError( ERROR_INVALID_PARAMETER );
+        return 0;
+    }
 
-    if (file_name && size)
-        file_name[0] = '\0';
+    ret = K32GetMappedFileNameW( process, addr, nameW, MAX_PATH );
+    if (ret)
+        return FILE_name_WtoA( nameW, -1, name, len );
 
     return 0;
 }
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index 717917d..2cee42c 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -2211,19 +2211,30 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
     MEMORY_BASIC_INFORMATION *info = buffer;
     sigset_t sigset;
 
-    if (info_class != MemoryBasicInformation)
+    switch (info_class)
     {
-        switch(info_class)
-        {
-            UNIMPLEMENTED_INFO_CLASS(MemoryWorkingSetList);
-            UNIMPLEMENTED_INFO_CLASS(MemorySectionName);
-            UNIMPLEMENTED_INFO_CLASS(MemoryBasicVlmInformation);
-
-            default:
-                FIXME("(%p,%p,info_class=%d,%p,%ld,%p) Unknown information class\n", 
-                      process, addr, info_class, buffer, len, res_len);
-                return STATUS_INVALID_INFO_CLASS;
-        }
+        case MemoryBasicInformation:
+            break;
+
+        case MemorySectionName:
+            FIXME("(%p,%p,MemorySectionName,%p,%lx,%p): stub\n",
+                  process, addr, buffer, len, res_len);
+            if (buffer && len)
+            {
+                LPWSTR p = buffer;
+                p[0] = 0;
+                if (*res_len) *res_len = 0;
+                return STATUS_SUCCESS;
+            }
+            return STATUS_INVALID_PARAMETER;
+
+        UNIMPLEMENTED_INFO_CLASS(MemoryWorkingSetList);
+        UNIMPLEMENTED_INFO_CLASS(MemoryBasicVlmInformation);
+
+        default:
+            FIXME("(%p,%p,info_class=%d,%p,%ld,%p) Unknown information class\n", 
+                  process, addr, info_class, buffer, len, res_len);
+            return STATUS_INVALID_INFO_CLASS;
     }
 
     if (process != NtCurrentProcess())
diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c
index 71c3c95..7d9667d 100644
--- a/dlls/psapi/tests/psapi_main.c
+++ b/dlls/psapi/tests/psapi_main.c
@@ -196,13 +196,15 @@ todo_wine
 
     SetLastError(0xdeadbeef);
     pGetMappedFileNameA(hpSR, hMod, szMapPath, sizeof(szMapPath));
-    todo_wine ok(GetLastError() == ERROR_ACCESS_DENIED, "expected error=ERROR_ACCESS_DENIED but got %d\n", GetLastError());
+todo_wine
+    ok(GetLastError() == ERROR_ACCESS_DENIED, "expected error=ERROR_ACCESS_DENIED but got %d\n", GetLastError());
 
     SetLastError( 0xdeadbeef );
     ret = pGetMappedFileNameA(hpQI, hMod, szMapPath, sizeof(szMapPath));
 todo_wine
     ok( ret || broken(GetLastError() == ERROR_UNEXP_NET_ERR), /* win2k */
         "GetMappedFileNameA failed with error %u\n", GetLastError() );
+todo_wine
     ok(ret == strlen(szMapPath), "szMapPath=\"%s\" ret=%d\n", szMapPath, ret);
 todo_wine
     ok(szMapPath[0] == '\\', "szMapPath=\"%s\"\n", szMapPath);
@@ -244,19 +246,18 @@ todo_wine
     SetLastError(0xdeadbeef);
     ret = pGetMappedFileNameA(GetCurrentProcess(), base, map_name, 0);
     ok(!ret, "GetMappedFileName should fail\n");
-todo_wine
     ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
 
     SetLastError(0xdeadbeef);
     ret = pGetMappedFileNameA(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 = pGetMappedFileNameA(GetCurrentProcess(), base, map_name, 1);
 todo_wine
     ok(ret == 1, "GetMappedFileName error %d\n", GetLastError());
+todo_wine
     ok(!map_name[0] || broken(map_name[0] == device_name[0]) /* before win2k */, "expected 0, got %c\n", map_name[0]);
 
     SetLastError(0xdeadbeef);
-- 
1.7.8.4




More information about the wine-patches mailing list