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