[PATCH v3 2/2] ntdll: Fill the PrivateUsage field of VM_COUNTERS_EX.

Zebediah Figura z.figura12 at gmail.com
Tue Jun 30 23:19:22 CDT 2020


From: Zebediah Figura <z.figura12 at gmail.com>

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
v3: fix a compiler warning...

 dlls/ntdll/tests/info.c   |  6 ++++++
 dlls/ntdll/unix/process.c | 10 ++++++----
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c
index 35e4b834c42..e399757b85d 100644
--- a/dlls/ntdll/tests/info.c
+++ b/dlls/ntdll/tests/info.c
@@ -1462,6 +1462,7 @@ static void test_query_process_vm(void)
     process = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId());
     status = pNtQueryInformationProcess(process, ProcessVmCounters, &pvi, sizeof(pvi), NULL);
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
+    ok( pvi.PrivateUsage == pvi.PagefileUsage, "wrong value %lu/%lu\n", pvi.PrivateUsage, pvi.PagefileUsage );
 
     /* Check if we have some return values */
     dump_vm_counters("VM counters for GetCurrentProcessId", &pvi);
@@ -1473,6 +1474,7 @@ static void test_query_process_vm(void)
     /* Check if we have real counters */
     status = pNtQueryInformationProcess(GetCurrentProcess(), ProcessVmCounters, &pvi, sizeof(pvi), NULL);
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
+    ok( pvi.PrivateUsage == pvi.PagefileUsage, "wrong value %lu/%lu\n", pvi.PrivateUsage, pvi.PagefileUsage );
     prev_size = pvi.VirtualSize;
     if (winetest_debug > 1)
         dump_vm_counters("VM counters before VirtualAlloc", &pvi);
@@ -1480,6 +1482,7 @@ static void test_query_process_vm(void)
     ok( ptr != NULL, "VirtualAlloc failed, err %u\n", GetLastError());
     status = pNtQueryInformationProcess(GetCurrentProcess(), ProcessVmCounters, &pvi, sizeof(pvi), NULL);
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
+    ok( pvi.PrivateUsage == pvi.PagefileUsage, "wrong value %lu/%lu\n", pvi.PrivateUsage, pvi.PagefileUsage );
     if (winetest_debug > 1)
         dump_vm_counters("VM counters after VirtualAlloc", &pvi);
     todo_wine ok( pvi.VirtualSize >= prev_size + alloc_size,
@@ -1488,6 +1491,7 @@ static void test_query_process_vm(void)
 
     status = pNtQueryInformationProcess(GetCurrentProcess(), ProcessVmCounters, &pvi, sizeof(pvi), NULL);
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
+    ok( pvi.PrivateUsage == pvi.PagefileUsage, "wrong value %lu/%lu\n", pvi.PrivateUsage, pvi.PagefileUsage );
     prev_size = pvi.VirtualSize;
     if (winetest_debug > 1)
         dump_vm_counters("VM counters before VirtualAlloc", &pvi);
@@ -1495,6 +1499,7 @@ static void test_query_process_vm(void)
     ok( ptr != NULL, "VirtualAlloc failed, err %u\n", GetLastError());
     status = pNtQueryInformationProcess(GetCurrentProcess(), ProcessVmCounters, &pvi, sizeof(pvi), NULL);
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
+    ok( pvi.PrivateUsage == pvi.PagefileUsage, "wrong value %lu/%lu\n", pvi.PrivateUsage, pvi.PagefileUsage );
     if (winetest_debug > 1)
         dump_vm_counters("VM counters after VirtualAlloc(MEM_RESERVE)", &pvi);
     todo_wine ok( pvi.VirtualSize >= prev_size + alloc_size,
@@ -1505,6 +1510,7 @@ static void test_query_process_vm(void)
     ok( ptr != NULL, "VirtualAlloc failed, err %u\n", GetLastError());
     status = pNtQueryInformationProcess(GetCurrentProcess(), ProcessVmCounters, &pvi, sizeof(pvi), NULL);
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
+    ok( pvi.PrivateUsage == pvi.PagefileUsage, "wrong value %lu/%lu\n", pvi.PrivateUsage, pvi.PagefileUsage );
     if (winetest_debug > 1)
         dump_vm_counters("VM counters after VirtualAlloc(MEM_COMMIT)", &pvi);
     ok( pvi.VirtualSize == prev_size,
diff --git a/dlls/ntdll/unix/process.c b/dlls/ntdll/unix/process.c
index c39d8fb23a4..33bee03c19a 100644
--- a/dlls/ntdll/unix/process.c
+++ b/dlls/ntdll/unix/process.c
@@ -1008,7 +1008,7 @@ NTSTATUS WINAPI NtTerminateProcess( HANDLE handle, LONG exit_code )
 
 #if defined(HAVE_MACH_MACH_H)
 
-static void fill_VM_COUNTERS(VM_COUNTERS* pvmi)
+static void fill_VM_COUNTERS( VM_COUNTERS_EX *pvmi )
 {
 #if defined(MACH_TASK_BASIC_INFO)
     struct mach_task_basic_info info;
@@ -1025,7 +1025,7 @@ static void fill_VM_COUNTERS(VM_COUNTERS* pvmi)
 
 #elif defined(linux)
 
-static void fill_VM_COUNTERS(VM_COUNTERS* pvmi)
+static void fill_VM_COUNTERS( VM_COUNTERS_EX *pvmi )
 {
     FILE *f;
     char line[256];
@@ -1056,7 +1056,7 @@ static void fill_VM_COUNTERS(VM_COUNTERS* pvmi)
 
 #else
 
-static void fill_VM_COUNTERS(VM_COUNTERS* pvmi)
+static void fill_VM_COUNTERS( VM_COUNTERS_EX *pvmi )
 {
     /* FIXME : real data */
 }
@@ -1168,7 +1168,7 @@ NTSTATUS WINAPI NtQueryInformationProcess( HANDLE handle, PROCESSINFOCLASS class
 
     case ProcessVmCounters:
         {
-            VM_COUNTERS pvmi;
+            VM_COUNTERS_EX pvmi;
 
             /* older Windows versions don't have the PrivateUsage field */
             if (size >= sizeof(VM_COUNTERS))
@@ -1196,6 +1196,8 @@ NTSTATUS WINAPI NtQueryInformationProcess( HANDLE handle, PROCESSINFOCLASS class
                         SERVER_END_REQ;
                         if (ret) break;
                     }
+                    if (size >= sizeof(VM_COUNTERS_EX))
+                        pvmi.PrivateUsage = pvmi.PagefileUsage;
                     len = size;
                     if (len != sizeof(VM_COUNTERS)) len = sizeof(VM_COUNTERS_EX);
                     memcpy(info, &pvmi, min(size, sizeof(pvmi)));
-- 
2.27.0




More information about the wine-devel mailing list