SetDefaultDllDirectories 函式 (libloaderapi.h)

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

語法

BOOL SetDefaultDllDirectories(
  [in] DWORD DirectoryFlags
);

參數

[in] DirectoryFlags

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

意義
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 搜尋路徑的詳細資訊,請參閱 動態連結程式庫搜尋順序

標準 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,並藉由呼叫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

另請參閱

AddDllDirectory

動態連結程式庫搜尋順序

動態連結程式庫安全性

LoadLibrary

LoadLibraryEx

RemoveDllDirectory