Функция SetDefaultDllDirectories (libloaderapi.h)
Задает набор каталогов по умолчанию для поиска, когда вызывающий процесс загружает библиотеку DLL. Этот путь поиска используется при вызове LoadLibraryEx без флагов LOAD_LIBRARY_SEARCH .
Синтаксис
BOOL SetDefaultDllDirectories(
[in] DWORD DirectoryFlags
);
Параметры
[in] DirectoryFlags
Каталоги для поиска. Этот параметр может быть любым сочетанием следующих значений.
Значение | Значение |
---|---|
|
Если используется это значение, выполняется поиск в каталоге установки приложения. |
|
Это значение представляет собой сочетание LOAD_LIBRARY_SEARCH_APPLICATION_DIR, LOAD_LIBRARY_SEARCH_SYSTEM32 и LOAD_LIBRARY_SEARCH_USER_DIRS.
Это значение представляет рекомендуемое максимальное количество каталогов, которые приложение должно включать в свой путь поиска DLL. |
|
Если используется это значение, выполняется поиск %windows%\system32. |
|
Если используется это значение, выполняется поиск по любому пути, явно добавленному с помощью функции AddDllDirectory или SetDllDirectory . Если добавлено несколько каталогов, порядок поиска по этим каталогам не указан. |
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Путь поиска DLL — это набор каталогов, в которых выполняется поиск библиотеки DLL, если полный путь не указан в вызове функции LoadLibrary или LoadLibraryEx или если указан полный путь к библиотеке DLL, но система должна искать зависимые библиотеки DLL. Дополнительные сведения о стандартном пути поиска библиотеки DLL см. в разделе Dynamic-Link Library Search Order.
Стандартный путь поиска 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. Однако путь поиска dll процесса можно переопределить, вызвав LoadLibraryEx с одним или несколькими флагами LOAD_LIBRARY_SEARCH , а каталоги, добавленные с помощью AddDllDirectory , можно удалить, вызвав Метод RemoveDllDirectory.
Windows 7, Windows Server 2008 R2, Windows Vista и Windows Server 2008: Чтобы вызвать эту функцию в приложении, используйте функцию GetProcAddress для получения ее адреса из Kernel32.dll. KB2533623 необходимо установить на целевой платформе.
Требования
Минимальная версия клиента | Windows 8 [только классические приложения], KB2533623 в Windows 7, Windows Server 2008 R2, Windows Vista и Windows Server 2008 |
Минимальная версия сервера | Windows Server 2012 [только классические приложения] |
Целевая платформа | Windows |
Header | libloaderapi.h (включая Windows.h) |
DLL | Kernel32.dll |
См. также
Порядок поиска библиотеки динамической компоновки (DLL)