Make GetProcessMemoryInfo fail if the passed buffer is too small.

diff --git a/dlls/psapi/psapi_main.c b/dlls/psapi/psapi_main.c
index 0b2be70..9e98ad9 100644
--- a/dlls/psapi/psapi_main.c
+++ b/dlls/psapi/psapi_main.c
@@ -516,33 +516,37 @@
  * Retrieve memory usage information for a given process
  *
  */
-BOOL WINAPI GetProcessMemoryInfo( HANDLE process, PPROCESS_MEMORY_COUNTERS counters, DWORD size )
+BOOL WINAPI GetProcessMemoryInfo(HANDLE hProcess, 
+                                 PPROCESS_MEMORY_COUNTERS pmc, DWORD cb)
 {
     NTSTATUS status;
     VM_COUNTERS vmc;
 
-    TRACE( "(%p, %p, %ld)\n", process, counters, size );
-
-    status = NtQueryInformationProcess( process, ProcessVmCounters, &vmc, sizeof(vmc), NULL );
-
-    if (status)
+    if (cb < sizeof(PROCESS_MEMORY_COUNTERS))
     {
-        SetLastError( RtlNtStatusToDosError( status ) );
+        SetLastError(ERROR_INSUFFICIENT_BUFFER);
         return FALSE;
     }
 
-    /* FIXME: check size */
+    status = NtQueryInformationProcess(hProcess, ProcessVmCounters, 
+                                       &vmc, sizeof(vmc), NULL);
 
-    counters->cb = sizeof(PROCESS_MEMORY_COUNTERS);
-    counters->PageFaultCount = vmc.PageFaultCount;
-    counters->PeakWorkingSetSize = vmc.PeakWorkingSetSize;
-    counters->WorkingSetSize = vmc.WorkingSetSize;
-    counters->QuotaPeakPagedPoolUsage = vmc.QuotaPeakPagedPoolUsage;
-    counters->QuotaPagedPoolUsage = vmc.QuotaPagedPoolUsage;
-    counters->QuotaPeakNonPagedPoolUsage = vmc.QuotaPeakNonPagedPoolUsage;
-    counters->QuotaNonPagedPoolUsage = vmc.QuotaNonPagedPoolUsage;
-    counters->PagefileUsage = vmc.PagefileUsage;
-    counters->PeakPagefileUsage = vmc.PeakPagefileUsage;
+    if (status)
+    {
+        SetLastError(RtlNtStatusToDosError(status));
+        return FALSE;
+    }
+
+    pmc->cb = sizeof(PROCESS_MEMORY_COUNTERS);
+    pmc->PageFaultCount = vmc.PageFaultCount;
+    pmc->PeakWorkingSetSize = vmc.PeakWorkingSetSize;
+    pmc->WorkingSetSize = vmc.WorkingSetSize;
+    pmc->QuotaPeakPagedPoolUsage = vmc.QuotaPeakPagedPoolUsage;
+    pmc->QuotaPagedPoolUsage = vmc.QuotaPagedPoolUsage;
+    pmc->QuotaPeakNonPagedPoolUsage = vmc.QuotaPeakNonPagedPoolUsage;
+    pmc->QuotaNonPagedPoolUsage = vmc.QuotaNonPagedPoolUsage;
+    pmc->PagefileUsage = vmc.PagefileUsage;
+    pmc->PeakPagefileUsage = vmc.PeakPagefileUsage;
 
     return TRUE;
 }
diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c
index 3e4bd65..58d244b 100644
--- a/dlls/psapi/tests/psapi_main.c
+++ b/dlls/psapi/tests/psapi_main.c
@@ -135,7 +135,7 @@
 
     w32_err(pGetProcessMemoryInfo(NULL, &pmc, sizeof(pmc)), ERROR_INVALID_HANDLE);
     todo_wine w32_err(pGetProcessMemoryInfo(hpSR, &pmc, sizeof(pmc)), ERROR_ACCESS_DENIED);
-    todo_wine w32_err(pGetProcessMemoryInfo(hpQI, &pmc, sizeof(pmc)-1), ERROR_INSUFFICIENT_BUFFER);
+    w32_err(pGetProcessMemoryInfo(hpQI, &pmc, sizeof(pmc)-1), ERROR_INSUFFICIENT_BUFFER);
     w32_suc(pGetProcessMemoryInfo(hpQI, &pmc, sizeof(pmc)));
 }