共用方式為


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
使用預設行為。

傳回值

如果函式成功,則傳回非零的值。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

EnumProcessModulesEx 函式主要是設計供調試程式和類似應用程式使用,這些應用程式必須從另一個進程擷取模組資訊。 如果目標進程中的模組清單已損毀或尚未初始化,或模組清單在函數調用期間因載入或卸除 DLL 而變更, EnumProcessModulesEx 可能會失敗或傳回不正確的資訊。

此函式主要用於64位應用程式。 如果函式是由在 WOW64 下執行的 32 位應用程式呼叫, 則會忽略 dwFilterFlag 選項,而且函式會提供與 EnumProcessModules 函式相同的結果。

建議您指定大型的 HMODULE 值數位,因為很難預測在呼叫 EnumProcessModulesEx 時,程式中會有多少模組。 若要判斷 lphModule 陣列是否太小而無法保存進程的所有模組句柄,請比較 lcbNeeded 中傳回的值與 cb 中指定的值。 如果 lNeeded 大於 cb,請增加數位的大小,並再次呼叫 EnumProcessModulesEx

若要判斷 對 EnumProcessModulesEx 的呼叫列舉了多少個模組,請將 ltwNeeded 參數中產生的值除以 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 中導出,並 Psapi.dll 為呼叫 K32EnumProcessModulesEx 的包裝函式。

必須在舊版 Windows 和 Windows 7 和更新版本上執行的程式應該一律將此函式呼叫為 EnumProcessModulesEx。 若要確保符號的正確解析度,請將 Psapi.lib 新增至 TARGETLIBS 宏,並使用 –DPSAPI_VERSION=1 編譯程式。 若要使用運行時間動態連結,請載入 Psapi.dll。

規格需求

需求
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 psapi.h (包含 Windows.h)
程式庫 Windows 7 和 Windows Server 2008 R2 上的 Kernel32.lib;如果 Windows 7 和 Windows Server 2008 R2 上的 PSAPI_VERSION=1) ,Psapi.lib (;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_VERSION=1) ,則為 Psapi.dll (;Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP 上的 Psapi.dll

另請參閱

CreateToolhelp32Snapshot

EnumProcesses

模組資訊

PSAPI 函式