Compartir a través de


Función SetDefaultDllDirectories (libloaderapi.h)

Especifica un conjunto predeterminado de directorios que se van a buscar cuando el proceso de llamada carga un archivo DLL. Esta ruta de acceso de búsqueda se usa cuando se llama a LoadLibraryEx sin marcas de LOAD_LIBRARY_SEARCH .

Sintaxis

BOOL SetDefaultDllDirectories(
  [in] DWORD DirectoryFlags
);

Parámetros

[in] DirectoryFlags

Directorios que se van a buscar. Este parámetro puede ser cualquier combinación de los valores siguientes.

Valor Significado
LOAD_LIBRARY_SEARCH_APPLICATION_DIR
0x00000200
Si se usa este valor, se busca en el directorio de instalación de la aplicación.
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
0x00001000
Este valor es una combinación de LOAD_LIBRARY_SEARCH_APPLICATION_DIR, LOAD_LIBRARY_SEARCH_SYSTEM32 y LOAD_LIBRARY_SEARCH_USER_DIRS.

Este valor representa el número máximo recomendado de directorios que una aplicación debe incluir en su ruta de búsqueda dll.

LOAD_LIBRARY_SEARCH_SYSTEM32
0x00000800
Si se usa este valor, se busca en %windows%\system32.
LOAD_LIBRARY_SEARCH_USER_DIRS
0x00000400
Si se usa este valor, se busca en cualquier ruta de acceso agregada explícitamente mediante la función AddDllDirectory o SetDllDirectory . Si se ha agregado más de un directorio, no se especifica el orden en el que se buscan esos directorios.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

La ruta de acceso de búsqueda dll es el conjunto de directorios que se buscan en un archivo DLL cuando no se especifica una ruta de acceso completa en una llamada de función LoadLibrary o LoadLibraryEx , o cuando se especifica una ruta de acceso completa al archivo DLL, pero el sistema debe buscar archivos DLL dependientes. Para obtener más información sobre la ruta de búsqueda de DLL estándar, consulte Orden de búsqueda de la biblioteca de vínculos dinámicos.

La ruta de acceso de búsqueda de DLL estándar contiene directorios que pueden ser vulnerables a un ataque de carga previa de DLL. Una aplicación puede usar la función SetDefaultDllDirectories para especificar una ruta de búsqueda de DLL predeterminada para el proceso que elimina los directorios más vulnerables y limita los demás directorios que se buscan. La ruta de acceso de búsqueda dll del proceso solo se aplica al proceso de llamada y persiste durante la vida útil del proceso.

Si el parámetro DirectoryFlags especifica más de una marca, se busca en los directorios en el orden siguiente:

  • Directorio que contiene el archivo DLL (LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR). Este directorio solo se busca en las dependencias del archivo DLL que se está cargando.
  • Directorio de la aplicación (LOAD_LIBRARY_SEARCH_APPLICATION_DIR).
  • Las rutas de acceso agregadas explícitamente a la ruta de búsqueda de la aplicación con la función AddDllDirectory (LOAD_LIBRARY_SEARCH_USER_DIRS) o la función SetDllDirectory . Si se ha agregado más de una ruta de acceso, no se especifica el orden en que se buscan las rutas de acceso.
  • Directorio del sistema (LOAD_LIBRARY_SEARCH_SYSTEM32).
Si SetDefaultDllDirectories no especifica LOAD_LIBRARY_SEARCH_USER_DIRS, los directorios especificados con la función AddDllDirectory solo se usan para las llamadas de función LoadLibraryEx que especifican LOAD_LIBRARY_SEARCH_USER_DIRS.

No es posible revertir a la ruta de búsqueda de DLL estándar ni quitar ningún directorio especificado con SetDefaultDllDirectories de la ruta de búsqueda. Sin embargo, la ruta de acceso de búsqueda de DLL del proceso se puede invalidar llamando a LoadLibraryEx con una o varias marcas de LOAD_LIBRARY_SEARCH , y los directorios agregados con AddDllDirectory se pueden quitar llamando a RemoveDllDirectory.

Windows 7, Windows Server 2008 R2, Windows Vista y Windows Server 2008: Para llamar a esta función en una aplicación, use la función GetProcAddress para recuperar su dirección de Kernel32.dll. KB2533623 debe instalarse en la plataforma de destino.

Requisitos

   
Cliente mínimo compatible Windows 8 [solo aplicaciones de escritorio],KB2533623 en Windows 7, Windows Server 2008 R2, Windows Vista y Windows Server 2008
Servidor mínimo compatible Windows Server 2012 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado libloaderapi.h (incluya Windows.h)
Archivo DLL Kernel32.dll

Vea también

AddDllDirectory

Orden de búsqueda de la biblioteca de vínculos dinámicos

Seguridad de la biblioteca de vínculos dinámicos

LoadLibrary

LoadLibraryEx

RemoveDllDirectory