GetModuleFileNameExA 函式 (psapi.h)
擷取包含指定模組之檔案的完整路徑。
語法
DWORD GetModuleFileNameExA(
[in] HANDLE hProcess,
[in, optional] HMODULE hModule,
[out] LPSTR lpFilename,
[in] DWORD nSize
);
參數
[in] hProcess
包含模組之進程的句柄。
句柄必須具有 PROCESS_QUERY_INFORMATION 和 PROCESS_VM_READ 訪問許可權。 如需詳細資訊,請參閱 處理安全性和存取權限。
Windows 10 和更新版本、Windows Server 2016 及更新版本:如果 hModule 參數為 NULL,則句柄只需要 PROCESS_QUERY_LIMITED_INFORMATION 訪問許可權。
GetModuleFileNameEx 函式不會擷取使用 LOAD_LIBRARY_AS_DATAFILE 旗標載入的模組路徑。 如需詳細資訊,請參閱 LoadLibraryEx。
[in, optional] hModule
模組的句柄。 如果此參數為 NULL,GetModuleFileNameEx 會傳回 hProcess中指定的進程可執行文件路徑。
[out] lpFilename
接收模組完整路徑之緩衝區的指標。 如果檔名的大小大於 nSize 參數的值,則函式會成功,但檔名會截斷且以 null 結尾。
[in] nSize
lpFilename 緩衝區的大小,以字元為單位。
傳回值
如果函式成功,傳回值會指定複製到緩衝區的字串長度。
如果函式失敗,傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
言論
GetModuleFileNameEx 函式主要設計供調試程式和必須從另一個進程擷取模組資訊的類似應用程式使用。 如果目標進程中的模組清單損毀或尚未初始化,或模組清單在函數調用期間因 DLL 載入或卸載而變更,GetModuleFileNameEx 可能會失敗或傳回不正確的資訊。
若要擷取目前進程中模組的名稱,請使用 GetModuleFileName 函式。 這比使用目前進程的句柄呼叫 GetModuleFileNameEx 更有效率且更可靠。
若要擷取遠端進程的主要可執行模組名稱,請使用 GetProcessImageFileName 或 QueryFullProcessImageName 函式。 這比使用 NULL 模組句柄呼叫 GetModuleFileNameEx 函式更有效率且更可靠。
從 Windows 7 和 Windows Server 2008 R2 開始,Psapi.h 會建立 PSAPI 函式的版本號碼。 PSAPI 版本號碼會影響用來呼叫函式的名稱,以及程式必須載入的連結庫。
如果 PSAPI_VERSION 為 2 或更新版本,此函式會在 Psapi.h 中定義為 K32GetModuleFileNameEx,並在 Kernel32.lib 和 Kernel32.dll中導出。 如果 PSAPI_VERSION 為 1,此函式會在 Psapi.h 中 定義為 getModuleFileNameEx,並在 Psapi.lib 中匯出,Psapi.dll 為呼叫 K32GetModuleFileNameEx的包裝函式。
必須在舊版 Windows 和 Windows 7 和更新版本上執行的程式,應該一律將此函式呼叫為 getModuleFileNameEx
例子
如需範例,請參閱 列舉進程的所有模組。
注意
psapi.h 標頭會根據 UNICODE 預處理器常數的定義,將 GetModuleFileNameEx 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
支援的最低伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平臺 | 窗戶 |
標頭 | psapi.h |
連結庫 | Windows 7 和 Windows Server 2008 R2 上的 Kernel32.lib;Psapi.lib (if PSAPI_VERSION=1) on Windows 7 和 Windows Server 2008 R2;Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP 上的 Psapi.lib |
DLL | Kernel32.dll Windows 7 和 Windows Server 2008 R2;Psapi.dll Windows 7 和 Windows Server 2008 R2 上的 PSAPI_VERSION=1;Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP 上的 Psapi.dll |