SetDefaultDllDirectories 函式 (libloaderapi.h)
指定要在呼叫進程載入 DLL 時搜尋的預設目錄集。 當 呼叫 LoadLibraryEx 且沒有 LOAD_LIBRARY_SEARCH 旗標時,就會使用此搜尋路徑。
語法
BOOL SetDefaultDllDirectories(
[in] DWORD DirectoryFlags
);
參數
[in] DirectoryFlags
要搜尋的目錄。 此參數可以是下列值的任何組合。
值 | 意義 |
---|---|
|
如果使用此值,則會搜尋應用程式的安裝目錄。 |
|
這個值是 LOAD_LIBRARY_SEARCH_APPLICATION_DIR、 LOAD_LIBRARY_SEARCH_SYSTEM32和 LOAD_LIBRARY_SEARCH_USER_DIRS的組合。
此值代表應用程式在其 DLL 搜尋路徑中應包含的建議目錄數目上限。 |
|
如果使用此值,則會搜尋 %windows%\system32。 |
|
如果使用此值,則會搜尋使用 AddDllDirectory 或 SetDllDirectory 函式明確新增的任何路徑。 如果已新增多個目錄,則會取消指定搜尋這些目錄的順序。 |
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
DLL 搜尋路徑是在 LoadLibrary 或 LoadLibraryEx 函式呼叫中未指定完整路徑時,或是指定 DLL 的完整路徑,但系統必須搜尋相依 DLL 時,所搜尋的目錄集。 如需標準 DLL 搜尋路徑的詳細資訊,請參閱 動態連結程式庫搜尋順序。
標準 DLL 搜尋路徑包含可能易受 DLL 預先載入攻擊的目錄。 應用程式可以使用 SetDefaultDllDirectories 函式來指定程式的預設 DLL 搜尋路徑,以排除最易受攻擊的目錄,並限制其他搜尋的目錄。 進程 DLL 搜尋路徑僅適用于呼叫進程,並在進程存留期間持續存在。
如果 DirectoryFlags 參數指定多個旗標,則會依照下列順序搜尋目錄:
- 包含 DLL (LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR) 的目錄。 此目錄只會搜尋要載入之 DLL 的相依性。
- 應用程式目錄 (LOAD_LIBRARY_SEARCH_APPLICATION_DIR) 。
- 使用 AddDllDirectory 函式明確新增至應用程式搜尋路徑的路徑, (LOAD_LIBRARY_SEARCH_USER_DIRS) 或 SetDllDirectory 函式 。 如果已新增多個路徑,則未指定搜尋路徑的順序。
- 系統目錄 (LOAD_LIBRARY_SEARCH_SYSTEM32) 。
您無法還原為標準 DLL 搜尋路徑,或從搜尋路徑中移除 SetDefaultDllDirectories 指定的任何目錄。 不過,呼叫具有一或多個LOAD_LIBRARY_SEARCH旗標的LoadLibraryEx,並藉由呼叫RemoveDllDirectory來移除新增的目錄,即可覆寫處理 DLL 搜尋路徑。
Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008: 若要在應用程式中呼叫此函式,請使用 GetProcAddress 函式從 Kernel32.dll 擷取其位址。 KB2533623 必須安裝在目標平臺上。
需求
最低支援的用戶端 | Windows 8 [僅限桌面應用程式],Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008 上的 KB2533623 |
最低支援的伺服器 | Windows Server 2012 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | libloaderapi.h (包含 Windows.h) |
DLL | Kernel32.dll |