模組資訊

模組是可執行檔或 DLL。 每個處理序都是由一或多個模組組成的。 您可以藉由呼叫 EnumProcessModules 函式來擷取進程的模組控制碼清單。 此函式會以指定進程的模組控制碼填入 HMODULE 值的陣列。 第一個模組是可執行檔。 請記住,這些模組控制碼最有可能來自其他進程,因此您無法搭配 GetModuleFileName等函式使用這些控制碼。 不過,您可以使用 PSAPI 函式 ,從另一個進程取得模組的相關資訊。

下列程式描述如何從另一個進程取得模組資訊。

從另一個進程取得模組資訊

  1. 呼叫 GetModuleBaseName 函式。 此函式會採用進程控制碼和模組控制碼作為輸入,並以模組的基底名稱填入緩衝區 (,例如,Kernel32.dll) 。 GetModuleFileNameEx的相關函式會採用與輸入相同的參數,但會傳回模組的完整路徑 (,例如,C:\Windows\System32\Kernel32.dll) 。
  2. 呼叫 GetModuleInformation 函式 。 此函式會採用進程控制碼和模組控制碼,並填入 MODULEINFO 結構的載入位址、其佔用的線性位址空間大小,以及其進入點的指標。

如果應用程式需要目前進程的模組資訊,它應該使用 GetModuleFileName 函式,而不是 PSAPI 模組函式。 這可透過兩種方式協助應用程式效能: GetModuleFileName 函式比 PSAPI 模組函式更有效率,而且如果應用程式不使用任何 PSAPI 函式,則可以避免載入psapi.dll。

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