SetDefaultDllDirectories 函数 (libloaderapi.h)
指定调用进程加载 DLL 时要搜索的默认目录集。 调用 LoadLibraryEx 且没有 LOAD_LIBRARY_SEARCH 标志时,将使用此搜索路径。
语法
BOOL SetDefaultDllDirectories(
[in] DWORD DirectoryFlags
);
parameters
[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 搜索路径包含易受 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 必须安装在目标平台上。
要求
最低受支持的客户端 | 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 |