指定要在调用进程加载 DLL 时搜索的默认目录集。 在没有LOAD_LIBRARY_SEARCH标志的情况下调用 LoadLibraryEx 时,将使用此搜索路径。
Syntax
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 删除添加的目录。
Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008: 若要在应用程序中调用此函数,请使用 GetProcAddress 函数从 Kernel32.dll检索其地址。 必须在 目标平台上安装KB2533623。
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | Windows 8 [仅限桌面应用],在 Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008 上KB2533623 |
| 支持的最低服务器 | Windows Server 2012 [仅限桌面应用] |
| 目标平台 | Windows操作系统 |
| Header | libloaderapi.h (包括 Windows.h) |
| Library | kernel32。自由 |
| DLL | Kernel32.dll |