指定呼叫進程載入 DLL 時要搜尋的預設目錄集。 當呼叫 LoadLibraryEx 時,會使用此搜尋路徑,且沒有 LOAD_LIBRARY_SEARCH 旗標。
語法
BOOL SetDefaultDllDirectories(
[in] DWORD DirectoryFlags
);
參數
[in] DirectoryFlags
要搜尋的目錄。 此參數可以是下列值的任意組合。
| 價值觀 | Meaning |
|---|---|
|
如果使用此值,則會搜尋應用程式的安裝目錄。 |
|
此值是 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 搜尋路徑的詳細資訊,請參閱 Dynamic-Link 文件庫搜尋順序。
標準 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 來覆寫進程 DLL 搜尋路徑,而呼叫 RemoveDllDirectory 來移除使用 AddDllDirectory 新增的目錄。
Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008: 若要在應用程式中呼叫此函式,請使用 GetProcAddress 函式從 Kernel32.dll擷取其位址。 KB2533623 必須安裝在目標平台上。
需求
| Requirement | 價值觀 |
|---|---|
| 最低支援的用戶端 | Windows 8 [僅限傳統型應用程式],KB2533623 Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008 |
| 支援的最低伺服器 | Windows Server 2012 [僅限傳統型應用程式] |
| 目標平臺 | 窗戶 |
| Header | libloaderapi.h (包括 Windows.h) |
| Library | 內核32。圖書館 |
| DLL | Kernel32.dll |