diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index a4e45d6c93c..458b4259b0a 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -772,6 +772,7 @@ @ stdcall K32GetProcessImageFileNameW(long ptr long) @ stdcall K32EnumProcessModules(long ptr long ptr) @ stdcall K32EnumProcesses(ptr long ptr) +@ stdcall K32GetProcessMemoryInfo(long ptr long) @ stdcall K32QueryWorkingSet(long ptr long) @ stdcall K32QueryWorkingSetEx(long ptr long) @ stdcall -i386 -private -register K32Thk1632Epilog() krnl386.exe16.K32Thk1632Epilog diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index 5436c062ef7..2ec5905d2d3 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -46,6 +46,7 @@ #define WIN32_NO_STATUS #include "winternl.h" #include "kernel_private.h" +#include "psapi.h" #include "wine/library.h" #include "wine/server.h" #include "wine/unicode.h" @@ -3621,6 +3622,47 @@ BOOL WINAPI K32QueryWorkingSetEx( HANDLE process, LPVOID buffer, DWORD size ) return TRUE; } +/*********************************************************************** + * K32GetProcessMemoryInfo (KERNEL32.@) + * + * Retrieve memory usage information for a given process + * + */ +BOOL WINAPI K32GetProcessMemoryInfo(HANDLE process, + PPROCESS_MEMORY_COUNTERS pmc, DWORD cb) +{ + NTSTATUS status; + VM_COUNTERS vmc; + + if (cb < sizeof(PROCESS_MEMORY_COUNTERS)) + { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return FALSE; + } + + status = NtQueryInformationProcess(process, ProcessVmCounters, + &vmc, sizeof(vmc), NULL); + + 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; +} + /*********************************************************************** * ProcessIdToSessionId (KERNEL32.@) * This function is available on Terminal Server 4SP4 and Windows 2000 diff --git a/dlls/psapi/psapi.spec b/dlls/psapi/psapi.spec index 37d6e803cab..ad037168b39 100644 --- a/dlls/psapi/psapi.spec +++ b/dlls/psapi/psapi.spec @@ -18,7 +18,7 @@ @ stdcall GetPerformanceInfo(ptr long) @ stdcall GetProcessImageFileNameA(long ptr long) kernel32.K32GetProcessImageFileNameA @ stdcall GetProcessImageFileNameW(long ptr long) kernel32.K32GetProcessImageFileNameW -@ stdcall GetProcessMemoryInfo(long ptr long) +@ stdcall GetProcessMemoryInfo(long ptr long) kernel32.K32GetProcessMemoryInfo @ stdcall GetWsChanges(long ptr long) @ stdcall InitializeProcessForWsWatch(long) @ stdcall QueryWorkingSet(long ptr long) kernel32.K32QueryWorkingSet diff --git a/dlls/psapi/psapi_main.c b/dlls/psapi/psapi_main.c index 909e7ce1016..0b8e5b065b6 100644 --- a/dlls/psapi/psapi_main.c +++ b/dlls/psapi/psapi_main.c @@ -406,47 +406,6 @@ BOOL WINAPI GetPerformanceInfo( PPERFORMANCE_INFORMATION info, DWORD size ) return TRUE; } -/*********************************************************************** - * GetProcessMemoryInfo (PSAPI.@) - * - * Retrieve memory usage information for a given process - * - */ -BOOL WINAPI GetProcessMemoryInfo(HANDLE hProcess, - PPROCESS_MEMORY_COUNTERS pmc, DWORD cb) -{ - NTSTATUS status; - VM_COUNTERS vmc; - - if (cb < sizeof(PROCESS_MEMORY_COUNTERS)) - { - SetLastError(ERROR_INSUFFICIENT_BUFFER); - return FALSE; - } - - status = NtQueryInformationProcess(hProcess, ProcessVmCounters, - &vmc, sizeof(vmc), NULL); - - 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; -} - /*********************************************************************** * GetWsChanges (PSAPI.@) */