システムのスナップショット
スナップショットは、ツールのヘルプ機能の中核です。 スナップショットは、システム メモリ内に存在する 1 つ以上のリスト (プロセス、スレッド、モジュール、ヒープ) の現在の状態の読み取り専用コピーです。
ツールを使用するプロセスは、オペレーティング システムから直接ではなく、スナップショットからこれらのリストにアクセスするのに役立ちます。 プロセスの開始と終了、スレッドの作成と破棄、実行可能モジュールの読み込みとシステム メモリからのアンロード、ヒープの作成と破棄を行うと、システム メモリの変更の一覧が表示されます。 スナップショットからの情報を使用すると、不整合を防ぐことができます。 そうしないと、リストを変更すると、スレッドが誤ってリストを走査したり、アクセス違反 (GP エラー) を引き起こしたりする可能性があります。 たとえば、他のスレッドが作成または終了されている間にアプリケーションがスレッド リストを走査する場合、アプリケーションがスレッド リストを走査するために使用している情報が古くなり、アプリケーションがリストを走査する際にエラーが発生する可能性があります。
システム メモリのスナップショットを取得するには、CreateToolhelp32Snapshot 関数を使用します。 スナップショットの内容を制御するには、この関数を呼び出すときに次の値を 1 つ以上指定します。
- TH32CS_SNAPHEAPLIST
- TH32CS_SNAPMODULE
- TH32CS_SNAPPROCESS
- TH32CS_SNAPTHREAD
TH32CS_SNAPHEAPLIST と TH32CS_SNAPMODULE の値はプロセス固有です。 これらの値を指定すると、指定したプロセスのヒープとモジュールの一覧がスナップショットに含まれます。 プロセス識別子としてゼロを指定すると、現在のプロセスが使用されます。 TH32CS_SNAPTHREAD 値は、プロセス識別子が CreateToolhelp32Snapshot渡された場合でも、常にシステム全体のスナップショットを作成します。
すべてのプロセスのヒープまたはモジュールの状態を列挙するには、現在のプロセスの TH32CS_SNAPALL 値とプロセス識別子を指定します。 次に、スナップショット内の追加プロセスごとに、CreateToolhelp32Snapshotをもう一度呼び出し、そのプロセス識別子と TH32CS_SNAPHEAPLIST または TH32CS_SNAPMODULE 値を指定します。
GetLastError 関数を使用して、CreateToolhelp32Snapshot の拡張エラー状態コードを取得できます。
プロセスでスナップショットの使用が完了したら、CloseHandle 関数を使用して破棄します。 スナップショットを破棄しない場合、プロセスは終了するまでメモリをリークし、その時点でシステムはメモリを解放します。
手記
スナップショット ハンドルはファイル ハンドルのように機能し、使用できるプロセスとスレッドに関して同じ規則に従います。 ハンドルが継承可能であることを指定するには、TH32CS_INHERIT 値を使用してスナップショットを作成します。
関連トピック
-
スナップショットの作成とプロセスの表示 の