モジュール情報

モジュールは実行可能ファイルまたは DLL です。 各プロセスは、1 つ以上のモジュールで構成されます。 EnumProcessModules 関数を呼び出すことで、プロセスのモジュール ハンドルの一覧を取得できます。 この関数は、 HMODULE 値の配列に、指定されたプロセスのモジュール ハンドルを格納します。 最初のモジュールは実行可能ファイルです。 これらのモジュール ハンドルは他のプロセスからの可能性が高いので、 GetModuleFileName などの関数では使用できないことに注意してください。 ただし、 PSAPI 関数 を使用して、別のプロセスからモジュールに関する情報を取得できます。

次の手順では、別のプロセスからモジュール情報を取得する方法について説明します。

別のプロセスからモジュール情報を取得するには

  1. GetModuleBaseName 関数を呼び出します。 この関数は、プロセス ハンドルとモジュール ハンドルを入力として受け取り、バッファーにモジュールのベース名 (たとえば、Kernel32.dll) を入力します。 関連する関数 GetModuleFileNameEx は、入力と同じパラメーターを受け取りますが、モジュールへの完全なパス (たとえば、C:\Windows\System32\Kernel32.dll) を返します。
  2. GetModuleInformation 関数を呼び出します。 この関数は、プロセス ハンドルとモジュール ハンドルを受け取り、モジュールの読み込みアドレス、占有する線形アドレス空間のサイズ、およびエントリ ポイントへのポインターを MODULEINFO 構造体に格納します。

アプリケーションで現在のプロセスのモジュール情報が必要な場合は、PSAPI モジュール関数の代わりに GetModuleFileName 関数を使用する必要があります。 これにより、アプリケーションのパフォーマンスが 2 つの方法で役立ちます。 GetModuleFileName 関数は PSAPI モジュール関数よりも効率的であり、アプリケーションは PSAPI 関数を使用しない場合にpsapi.dllの読み込みを回避できます。

GetModuleBaseName 関数と GetModuleFileNameEx 関数は、主に、別のプロセスからモジュール情報を抽出する必要があるデバッガーや同様のアプリケーションで使用するように設計されています。 ターゲット プロセスのモジュール リストが破損しているか、まだ初期化されていない場合、または DLL の読み込みまたはアンロードの結果として関数呼び出し中にモジュール リストが変更された場合、これらの関数は失敗したり、正しくない情報を返したりする可能性があります。