BOOL InitializeProcessForWsWatch(HANDLE hProcess);
監視を終了する関数はない。
引数の意味は以下の通り。
hProcess | 監視するプロセスのハンドル。 |
戻り値は、関数の実行に成功したか否かを表す真偽値である。
void DispWsChanges() { DWORD i; DWORD ProcessId; HANDLE hProcess; HWND hWnd; char WindowTitle[1000]; BOOL bResult; PSAPI_WS_WATCH_INFORMATION Infos[10000]; /* 五秒間待機 */ for(i=5; i>0; i--) { printf("%d秒前\n", i); Sleep(1000); } /* この時点でフォアグラウンドウィンドウを所有しているプロセスをオープン */ hWnd = GetForegroundWindow(); GetWindowText(hWnd, WindowTitle, 1000); GetWindowThreadProcessId(hWnd, &ProcessId); hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId); /* そのプロセスのワーキングセットの開始監視 */ printf("target: %s\n", WindowTitle); bResult = InitializeProcessForWsWatch(hProcess); if(!bResult) { printf("working-set watching can not start.\n"); CloseHandle(hProcess); return; } /* 十秒間待機 */ printf("wait 10 seconds...\n"); Sleep(10000); /* 十秒間の間のワーキングセットの変更情報を取得 */ GetWsChanges(hProcess, Infos, sizeof(Infos)); /* 結果を表示 */ i = 0; while(Infos[i].FaultingPc != NULL || Infos[i].FaultingVa != NULL) { /* 下記でPcはページフォールトを起こした命令があるアドレス */ /* Vaはそのページフォールトに対してワーキングセットに追加されたページのアドレス */ printf("Pc: %p, Va: %p\n", Infos[i].FaultingPc, Infos[i].FaultingVa); i++; } CloseHandle(hProcess); }