Share via


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

フィルター条件。 このパラメーターには、次の値のいずれかを指定できます。

意味
LIST_MODULES_32BIT
0x01
32 ビット モジュールを一覧表示します。
LIST_MODULES_64BIT
0x02
64 ビット モジュールを一覧表示します。
LIST_MODULES_ALL
0x03
すべてのモジュールを一覧表示します。
LIST_MODULES_DEFAULT
0x0
既定の動作を使用します。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

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

この関数は、主に 64 ビット アプリケーションを対象としています。 WOW64 で実行されている 32 ビット アプリケーションによって関数が呼び出された場合、 dwFilterFlag オプションは無視され、関数は EnumProcessModules 関数と同じ結果を提供します。

EnumProcessModulesEx を呼び出す時点でプロセス内に存在するモジュールの数を予測することは困難であるため、HMODULE 値の大きな配列を指定することをお勧めします。 lphModule 配列が小さすぎてプロセスのすべてのモジュール ハンドルを保持できるかどうかを判断するには、lpcbNeeded で返される値と cb で指定された値を比較しますlpcbNeededcb より大きい場合は、配列のサイズを大きくし、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

こちらもご覧ください

CreateToolhelp32Snapshot

EnumProcesses

モジュール情報

PSAPI 関数