InitializeProcessForWsWatch ワーキングセットの監視の開始

Cの宣言:

BOOL InitializeProcessForWsWatch(HANDLE hProcess);

説明:

hProcessで指定されたプロセスのワーキングセットの監視を開始する。監視が開始されたプロセスに対して、GetWsChangesを実行することにより、監視後のワーキングセットの変更情報を取得することができる。

監視を終了する関数はない。

引数の意味は以下の通り。
hProcess 監視するプロセスのハンドル。

戻り値は、関数の実行に成功したか否かを表す真偽値である。

Cのサンプル:

関数呼出し後五秒間待つ。次に、その時点でフォアグラウンドウィンドウとなっているウィンドウを探し、そのウィンドウを作成したプロセスをオープンする。オープンしたら、ワーキングセットの監視を開始し、十秒間待つ。最後に、その十秒間でのワーキングセットの変更情報を表示する。
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);
}

(original text:1999/01/06 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。