模組資訊
模組 是可執行檔或 DLL。 每個程式都包含一或多個模組。 您可以呼叫 EnumProcessModules 函式,來擷取進程的模組句柄清單。 此函式會填入 HMODULE 的陣列, 值與指定進程的模組句柄。 第一個模組是可執行檔。 請記住,這些模組句柄最有可能來自其他進程,因此您無法將這些句柄與 getModuleFileName等函式搭配使用。 不過,您可以使用 PSAPI 函式 從另一個進程取得模組的相關信息。
下列程式描述如何從另一個進程取得模組資訊。
從另一個進程取得模組資訊
- 呼叫 getModuleBaseName函式。 此函式會採用進程句柄和模組句柄作為輸入,並以模組的基底名稱填入緩衝區(例如,Kernel32.dll)。 GetModuleFileNameEx相關的函式會接受與輸入相同的參數,但會傳回模組的完整路徑(例如,C:\Windows\System32\Kernel32.dll)。
- 呼叫 getModuleInformation函式。 此函式會採用進程句柄和模組句柄,並將 MODULEINFO 結構填入模組的載入位址、佔用的線性地址空間大小,以及其進入點的指標。
如果應用程式需要目前進程的模組資訊,它應該使用 GetModuleFileName 函式,而不是 PSAPI 模組函式。 這可透過兩種方式協助應用程式效能:GetModuleFileName 函式比 PSAPI 模組函式更有效率,如果應用程式不使用任何 PSAPI 函式,則應用程式可以避免載入 psapi.dll。
GetModuleBaseName 和 GetModuleFileNameEx 函式主要是設計供調試程式和類似的應用程式使用,這些應用程式必須從另一個進程擷取模組資訊。 如果目標進程中的模組清單損毀或尚未初始化,或模組清單在函數調用期間因 DLL 載入或卸載而變更,這些函式可能會失敗或傳回不正確的資訊。