Поделиться через


Функция SetDefaultDllDirectory (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_DIR, LOAD_LIBRARY_SEARCH_SYSTEM32 и LOAD_LIBRARY_SEARCH_USER_DIRS.

Это значение представляет рекомендуемое максимальное количество каталогов, которые приложение должно включать в путь поиска библиотеки DLL.

LOAD_LIBRARY_SEARCH_SYSTEM32
0x00000800
Если это значение используется, %windows%\system32 выполняется поиск.
LOAD_LIBRARY_SEARCH_USER_DIRS
0x00000400
Если это значение используется, выполняется поиск любого пути, явно добавленного с помощью функции AddDllDirectory или SetDllDirectory . Если добавлено несколько каталогов, порядок поиска этих каталогов не определен.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение ненулевое.

Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.

Замечания

Путь поиска библиотеки DLL — это набор каталогов, которые ищут библиотеку DLL, если полный путь не указан в вызове функции LoadLibraryИли LoadLibraryEx или если указан полный путь к библиотеке DLL, но система должна искать зависимые библиотеки DLL. Дополнительные сведения о стандартном пути поиска библиотеки DLL см. в Dynamic-Link порядке поиска библиотеки.

Стандартный путь поиска dll содержит каталоги, которые могут быть уязвимы для атаки предварительной загрузки библиотеки DLL. Приложение может использовать функцию SetDefaultDllDirectory , чтобы указать путь поиска библиотеки 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).
Если SetDefaultDllDirectory не указывает LOAD_LIBRARY_SEARCH_USER_DIRS, каталоги, указанные функцией AddDllDirectory , используются только для вызовов функций LoadLibraryEx , которые указывают LOAD_LIBRARY_SEARCH_USER_DIRS.

Невозможно вернуться к стандартному пути поиска библиотеки DLL или удалить любой каталог, указанный в SetDefaultDllDirectory из пути поиска. Однако путь поиска библиотеки 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 [только классические приложения]
целевая платформа Виндоус
Header libloaderapi.h (включая Windows.h)
Library kernel32. Lib
DLL Kernel32.dll

См. также

AddDllDirectory

Порядок поиска библиотекиDynamic-Link

безопасность библиотекиDynamic-Link

LoadLibrary

LoadLibraryEx

RemoveDllDirectory