モジュール情報
モジュールは実行可能ファイルまたは DLL です。 各プロセスは、1 つ以上のモジュールで構成されます。 EnumProcessModules 関数を呼び出すことで、プロセスのモジュール ハンドルの一覧を取得できます。 この関数は、 HMODULE 値の配列に、指定されたプロセスのモジュール ハンドルを格納します。 最初のモジュールは実行可能ファイルです。 これらのモジュール ハンドルは他のプロセスからの可能性が高いので、 GetModuleFileName などの関数では使用できないことに注意してください。 ただし、 PSAPI 関数 を使用して、別のプロセスからモジュールに関する情報を取得できます。
次の手順では、別のプロセスからモジュール情報を取得する方法について説明します。
別のプロセスからモジュール情報を取得するには
- GetModuleBaseName 関数を呼び出します。 この関数は、プロセス ハンドルとモジュール ハンドルを入力として受け取り、バッファーにモジュールのベース名 (たとえば、Kernel32.dll) を入力します。 関連する関数 GetModuleFileNameEx は、入力と同じパラメーターを受け取りますが、モジュールへの完全なパス (たとえば、C:\Windows\System32\Kernel32.dll) を返します。
- GetModuleInformation 関数を呼び出します。 この関数は、プロセス ハンドルとモジュール ハンドルを受け取り、モジュールの読み込みアドレス、占有する線形アドレス空間のサイズ、およびエントリ ポイントへのポインターを MODULEINFO 構造体に格納します。
アプリケーションで現在のプロセスのモジュール情報が必要な場合は、PSAPI モジュール関数の代わりに GetModuleFileName 関数を使用する必要があります。 これにより、アプリケーションのパフォーマンスが 2 つの方法で役立ちます。 GetModuleFileName 関数は PSAPI モジュール関数よりも効率的であり、アプリケーションは PSAPI 関数を使用しない場合にpsapi.dllの読み込みを回避できます。
GetModuleBaseName 関数と GetModuleFileNameEx 関数は、主に、別のプロセスからモジュール情報を抽出する必要があるデバッガーや同様のアプリケーションで使用するように設計されています。 ターゲット プロセスのモジュール リストが破損しているか、まだ初期化されていない場合、または DLL の読み込みまたはアンロードの結果として関数呼び出し中にモジュール リストが変更された場合、これらの関数は失敗したり、正しくない情報を返したりする可能性があります。