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位模組。 |
|
列出所有模組。 |
|
使用預設行為。 |
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 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 |