GetProcessMemoryInfo()関数を利用します。
プロトタイプ宣言
HANDLE OpenProcess(
DWORD dwDesiredAccess, // アクセス・フラグ
BOOL bInheritHandle, // ハンドルの継承オプション
DWORD dwProcessId // プロセス識別子
);
BOOL CloseHandle(
HANDLE hObject // オブジェクトのハンドル
);
BOOL GetProcessMemoryInfo(
HANDLE Process, // プロセスのハンドル
PPROCESS_MEMORY_COUNTERS ppsmemCounters, // 構造体のポインタ
DWORD cb // 構造体のサイズ
);構造体
typedef struct _PROCESS_MEMORY_COUNTERS {
DWORD cb; // 構造体のサイズ
DWORD PageFaultCount; // ページ・フォールト数
SIZE_T PeakWorkingSetSize; // 最大ワーキングセット
SIZE_T WorkingSetSize; // 現在ワーキングセット
SIZE_T QuotaPeakPagedPoolUsage; // 最大ページプールの使用サイズ
SIZE_T QuotaPagedPoolUsage; // 現在ページプールの使用サイズ
SIZE_T QuotaPeakNonPagedPoolUsage; // 最大非ページプールの使用サイズ
SIZE_T QuotaNonPagedPoolUsage; // 現在非ページプールの使用サイズ
SIZE_T PagefileUsage; // 現在ページングファイルの使用サイズ
SIZE_T PeakPagefileUsage; // 最大ページングファイルの使用サイズ
} PROCESS_MEMORY_COUNTERS, *PPROCESS_MEMORY_COUNTERS;サンプル
要インクルードPsapi.h インポートライブラリとしてPsapi.Lib追加
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <Psapi.h> // Psapi.Lib
// マクロ関数
#define DISP_PARAM(n) (n), ((n) / 1024)
// メイン関数
int main( int argc, char *argv[] )
{
PROCESS_MEMORY_COUNTERS pmc = { 0 };
DWORD dwProcessID = GetCurrentProcessId();
HANDLE hProcess;
if ( argc > 1 ){
dwProcessID = atoi( argv[1] );
}
if ( (hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwProcessID)) != NULL ){
if ( GetProcessMemoryInfo(hProcess,&pmc,sizeof(pmc)) ){
printf( TEXT("プロセスID :%lu\n"), dwProcessID );
printf( TEXT("プロセス・ハンドル :0x%p\n"), hProcess );
printf( TEXT("ページフォールト数 :%10lu個\n"), pmc.PageFaultCount );
printf( TEXT("最大ワーキングセットのサイズ :%10luバイト(%lu KB)\n"), DISP_PARAM(pmc.PeakWorkingSetSize) );
printf( TEXT("現在ワーキングセットのサイズ :%10luバイト(%lu KB)\n"), DISP_PARAM(pmc.WorkingSetSize) );
printf( TEXT("最大ページプールの使用サイズ :%10luバイト(%lu KB)\n"), DISP_PARAM(pmc.QuotaPeakPagedPoolUsage) );
printf( TEXT("現在ページプールの使用サイズ :%10luバイト(%lu KB)\n"), DISP_PARAM(pmc.QuotaPagedPoolUsage) );
printf( TEXT("最大非ページプールの使用サイズ :%10luバイト(%lu KB)\n"), DISP_PARAM(pmc.QuotaPeakNonPagedPoolUsage) );
printf( TEXT("現在非ページプールの使用サイズ :%10luバイト(%lu KB)\n"), DISP_PARAM(pmc.QuotaNonPagedPoolUsage) );
printf( TEXT("最大ページングファイルの使用サイズ:%10luバイト(%lu KB)\n"), DISP_PARAM(pmc.PeakPagefileUsage) );
printf( TEXT("現在ページングファイルの使用サイズ:%10luバイト(%lu KB)\n"), DISP_PARAM(pmc.PagefileUsage) );
}
else{
printf( TEXT("%lu:GetProcessMemoryInfo()関数のエラーです。\n"), GetLastError() );
}
CloseHandle( hProcess );
return 0;
}
printf( TEXT("%lu:OpenProcess()関数のエラーです。\n"), GetLastError() );
return 1;
}