EnumProcessModulesEx 関数 (psapi.h)
指定したフィルター条件を満たす、指定したプロセス内の各モジュールのハンドルを取得します。
構文
BOOL EnumProcessModulesEx(
[in] HANDLE hProcess,
[out] HMODULE *lphModule,
[in] DWORD cb,
[out] LPDWORD lpcbNeeded,
[in] DWORD dwFilterFlag
);
パラメーター
[in] hProcess
プロセスへのハンドル。
[out] lphModule
モジュール ハンドルの一覧を受け取る配列。
[in] cb
lphModule 配列のサイズ (バイト単位)。
[out] lpcbNeeded
すべてのモジュール ハンドルを lphModule 配列に格納するために必要なバイト数。
[in] dwFilterFlag
フィルター条件。 このパラメーターには、次の値のいずれかを指定できます。
値 | 意味 |
---|---|
|
32 ビット モジュールを一覧表示します。 |
|
64 ビット モジュールを一覧表示します。 |
|
すべてのモジュールを一覧表示します。 |
|
既定の動作を使用します。 |
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
EnumProcessModulesEx 関数は、主に、別のプロセスからモジュール情報を抽出する必要があるデバッガーや同様のアプリケーションで使用するように設計されています。 ターゲット プロセスのモジュール リストが破損しているか、まだ初期化されていない場合、または DLL の読み込みまたはアンロードの結果として関数呼び出し中にモジュール リストが変更された場合、 EnumProcessModulesEx が失敗したり、正しくない情報が返されたりする可能性があります。
この関数は、主に 64 ビット アプリケーションを対象としています。 WOW64 で実行されている 32 ビット アプリケーションによって関数が呼び出された場合、 dwFilterFlag オプションは無視され、関数は EnumProcessModules 関数と同じ結果を提供します。
EnumProcessModulesEx を呼び出す時点でプロセス内に存在するモジュールの数を予測することは困難であるため、HMODULE 値の大きな配列を指定することをお勧めします。 lphModule 配列が小さすぎてプロセスのすべてのモジュール ハンドルを保持できるかどうかを判断するには、lpcbNeeded で返される値と cb で指定された値を比較します。 lpcbNeeded が cb より大きい場合は、配列のサイズを大きくし、EnumProcessModulesEx をもう一度呼び出します。
EnumProcessModulesEx の呼び出しによって列挙されたモジュールの数を確認するには、lpcbNeeded パラメーターの結果の値を でsizeof(HMODULE)
除算します。
EnumProcessModulesEx 関数は、LOAD_LIBRARY_AS_DATAFILE フラグで読み込まれたモジュールのハンドルを取得しません。 詳細については、「 LoadLibraryEx」を参照してください。
この関数によって返されるハンドルに対して CloseHandle を呼び出さないでください。 情報はスナップショットから取得されるため、解放するリソースはありません。
指定したプロセスと、これらのプロセスで使用されるヒープ、モジュール、スレッドのスナップショットを取得するには、CreateToolhelp32Snapshot 関数を使用します。
Windows 7 および Windows Server 2008 R2 以降、Psapi.h は PSAPI 関数のバージョン番号を確立します。 PSAPI バージョン番号は、プログラムが読み込む必要がある関数とライブラリの呼び出しに使用される名前に影響します。
PSAPI_VERSIONが 2 以上の場合、この関数は Psapi.h の K32EnumProcessModulesEx として定義され、Kernel32.lib および Kernel32.dll でエクスポートされます。 PSAPI_VERSIONが 1 の場合、この関数は Psapi.h で EnumProcessModulesEx として定義され、Psapi.lib でエクスポートされ、 K32EnumProcessModulesEx を呼び出すラッパーとして Psapi.dll されます。
以前のバージョンの Windows および Windows 7 以降のバージョンで実行する必要があるプログラムは、常に EnumProcessModulesEx としてこの関数を呼び出す必要があります。 シンボルを正しく解決するには、PSapi.lib を TARGETLIBS マクロに追加し、-DPSAPI_VERSION=1 でプログラムをコンパイルします。 実行時の動的リンクを使用するには、Psapi.dll を読み込みます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | psapi.h (Windows.h を含む) |
Library | Windows 7 および Windows Server 2008 R2 の Kernel32.lib。Windows 7 および Windows Server 2008 R2 の Psapi.lib (PSAPI_VERSION=1 の場合)。Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP の Psapi.lib |
[DLL] | Windows 7 および Windows Server 2008 R2 で Kernel32.dll。Windows 7 および Windows Server 2008 R2 で Psapi.dll (PSAPI_VERSION=1 の場合)。Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP の Psapi.dll |