モジュール情報
モジュール は実行可能ファイルまたは 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 の読み込みまたはアンロードの結果として関数呼び出し中にモジュール リストが変更された場合、これらの関数は失敗したり、正しくない情報を返したりする可能性があります。