enumProcessModules 函式 (psapi.h)

擷取指定進程中每個模組的句柄。

若要控制 64 位應用程式是否列舉 32 位模組、64 位模組或兩種類型的模組,請使用 EnumProcessModulesEx 函式。

語法

BOOL EnumProcessModules(
  [in]  HANDLE  hProcess,
  [out] HMODULE *lphModule,
  [in]  DWORD   cb,
  [out] LPDWORD lpcbNeeded
);

參數

[in] hProcess

進程的句柄。

[out] lphModule

接收模組句柄清單的陣列。

[in] cb

lphModule 陣列的大小,以位元組為單位。

[out] lpcbNeeded

lphModule 陣列中儲存所有模組句柄所需的位元組數目。

傳回值

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

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

備註

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

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

若要判斷對 EnumProcessModules 的呼叫列舉了多少個模組,請將 lNeed 參數中產生的值除以 sizeof(HMODULE)

EnumProcessModules 函式不會擷取以LOAD_LIBRARY_AS_DATAFILE或類似旗標載入之模組的句柄。 如需詳細資訊,請參閱 LoadLibraryEx

請勿在此函式傳回的任何句柄上呼叫 CloseHandle 。 此資訊來自快照集,因此不會釋放任何資源。

如果從 WOW64 上執行的 32 位應用程式呼叫此函式,它只能列舉 32 位進程的模組。 如果進程是64位進程,則此函式會失敗,而且最後一個錯誤碼 會ERROR_PARTIAL_COPY ( 299) 。

若要擷取指定進程和這些進程所使用的堆積、模組和線程快照集,請使用 CreateToolhelp32Snapshot 函式。

從 Windows 7 和 Windows Server 2008 R2 開始,Psapi.h 會建立 PSAPI 函式的版本號碼。 PSAPI 版本號碼會影響用來呼叫函式的名稱,以及程式必須載入的連結庫。

如果 PSAPI_VERSION 為 2 或更新版本,此函式會定義為 Psapi.h 中的 K32EnumProcessModules,並在 Kernel32.lib 和 Kernel32.dll 中導出。 如果 PSAPI_VERSION 為 1,此函式會定義為 Psapi.h 中的 EnumProcessModules, 並在 Psapi.lib 中導出,並 Psapi.dll 為呼叫 K32EnumProcessModules 的包裝函式。

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

範例

如需範例,請參閱 列舉所有進程列舉進程的所有模組

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平台 Windows
標頭 psapi.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

EnumProcessModulesEx

EnumProcesses

模組資訊

PSAPI 函式