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


Функция 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_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 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).
Если setDefaultDllDirectories не указывает LOAD_LIBRARY_SEARCH_USER_DIRS, каталоги, указанные с помощью функции AddDllDirectory , используются только для вызовов функций LoadLibraryEx , указывающих LOAD_LIBRARY_SEARCH_USER_DIRS.

Невозможно отменить изменения в стандартный путь поиска 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

См. также

AddDllDirectory

Порядок поиска библиотеки динамической компоновки (DLL)

Безопасность библиотеки динамической компоновки

LoadLibrary

LoadLibraryEx

RemoveDllDirectory