共用方式為


SetDefaultDllDirectories 函式 (libloaderapi.h)

指定呼叫進程載入 DLL 時要搜尋的預設目錄集。 當呼叫 LoadLibraryEx 時,會使用此搜尋路徑,且沒有 LOAD_LIBRARY_SEARCH 旗標。

語法

BOOL SetDefaultDllDirectories(
  [in] DWORD DirectoryFlags
);

參數

[in] DirectoryFlags

要搜尋的目錄。 此參數可以是下列值的任意組合。

價值觀 Meaning
LOAD_LIBRARY_SEARCH_APPLICATION_DIR
0x00000200
如果使用此值,則會搜尋應用程式的安裝目錄。
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
0x00001000
此值是 LOAD_LIBRARY_SEARCH_APPLICATION_DIRLOAD_LIBRARY_SEARCH_SYSTEM32LOAD_LIBRARY_SEARCH_USER_DIRS 的組合。

此值代表應用程式應該包含在其 DLL 搜尋路徑中的建議目錄數目上限。

LOAD_LIBRARY_SEARCH_SYSTEM32
0x00000800
如果使用此值,則會搜尋 %windows%\system32。
LOAD_LIBRARY_SEARCH_USER_DIRS
0x00000400
如果使用此值,則會搜尋使用 AddDllDirectorySetDllDirectory 函式明確新增的任何路徑。 如果已新增多個目錄,則未指定搜尋這些目錄的順序。

返回值

如果函式成功,則傳回值為非零值。

如果函式失敗,傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

DLL 搜尋路徑是一組目錄,當未在 LoadLibraryLoadLibraryEx 函式呼叫中指定完整路徑時,或指定 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)。
如果 SetDefaultDllDirectories 未指定LOAD_LIBRARY_SEARCH_USER_DIRS,則使用 AddDllDirectory 函式指定的目錄只會用於指定LOAD_LIBRARY_SEARCH_USER_DIRSLoadLibraryEx 函式呼叫。

無法還原為標準 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

另請參閱

AddDll目錄

Dynamic-Link 圖書館搜尋順序

Dynamic-Link 圖書館安全

LoadLibrary

LoadLibraryEx

RemoveDllDirectory