Fonction SetDefaultDllDirectories (libloaderapi.h)

Spécifie un ensemble par défaut de répertoires à rechercher lorsque le processus appelant charge une DLL. Ce chemin de recherche est utilisé lorsque LoadLibraryEx est appelé sans indicateur LOAD_LIBRARY_SEARCH .

Syntaxe

BOOL SetDefaultDllDirectories(
  [in] DWORD DirectoryFlags
);

Paramètres

[in] DirectoryFlags

Répertoires à rechercher. Ce paramètre peut être n’importe quelle combinaison des valeurs suivantes.

Valeur Signification
LOAD_LIBRARY_SEARCH_APPLICATION_DIR
0x00000200
Si cette valeur est utilisée, le répertoire d’installation de l’application fait l’objet d’une recherche.
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
0x00001000
Cette valeur est une combinaison de LOAD_LIBRARY_SEARCH_APPLICATION_DIR, LOAD_LIBRARY_SEARCH_SYSTEM32 et LOAD_LIBRARY_SEARCH_USER_DIRS.

Cette valeur représente le nombre maximal recommandé de répertoires qu’une application doit inclure dans son chemin de recherche DLL.

LOAD_LIBRARY_SEARCH_SYSTEM32
0x00000800
Si cette valeur est utilisée, %windows%\system32 est recherché.
LOAD_LIBRARY_SEARCH_USER_DIRS
0x00000400
Si cette valeur est utilisée, tout chemin d’accès explicitement ajouté à l’aide de la fonction AddDllDirectory ou SetDllDirectory fait l’objet d’une recherche. Si plusieurs répertoires ont été ajoutés, l’ordre dans lequel ces répertoires sont recherchés n’est pas spécifié.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Notes

Le chemin de recherche dll est l’ensemble de répertoires recherchés pour une DLL lorsqu’un chemin d’accès complet n’est pas spécifié dans un appel de fonction LoadLibrary ou LoadLibraryEx , ou lorsqu’un chemin d’accès complet à la DLL est spécifié, mais que le système doit rechercher des DLL dépendantes. Pour plus d’informations sur le chemin de recherche de DLL standard, consultez Dynamic-Link Library Search Order.

Le chemin de recherche DLL standard contient des répertoires qui peuvent être vulnérables à une attaque de préchargement dll. Une application peut utiliser la fonction SetDefaultDllDirectories pour spécifier un chemin de recherche DLL par défaut pour le processus qui élimine les répertoires les plus vulnérables et limite les autres répertoires recherchés. Le chemin de recherche de la DLL de processus s’applique uniquement au processus appelant et persiste pendant toute la durée du processus.

Si le paramètre DirectoryFlags spécifie plusieurs indicateurs, les répertoires sont recherchés dans l’ordre suivant :

  • Répertoire qui contient la DLL (LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR). Ce répertoire est recherché uniquement pour les dépendances de la DLL en cours de chargement.
  • Répertoire de l’application (LOAD_LIBRARY_SEARCH_APPLICATION_DIR).
  • Chemins d’accès explicitement ajoutés au chemin de recherche de l’application avec la fonction AddDllDirectory (LOAD_LIBRARY_SEARCH_USER_DIRS) ou la fonction SetDllDirectory . Si plusieurs chemins ont été ajoutés, l’ordre dans lequel les chemins d’accès sont recherchés n’est pas spécifié.
  • Répertoire système (LOAD_LIBRARY_SEARCH_SYSTEM32).
Si SetDefaultDllDirectories ne spécifie pas LOAD_LIBRARY_SEARCH_USER_DIRS, les répertoires spécifiés avec la fonction AddDllDirectory sont utilisés uniquement pour les appels de fonction LoadLibraryEx qui spécifient LOAD_LIBRARY_SEARCH_USER_DIRS.

Il n’est pas possible de revenir au chemin de recherche DE DLL standard ou de supprimer un répertoire spécifié avec SetDefaultDllDirectories du chemin de recherche. Toutefois, le chemin de recherche dll du processus peut être remplacé en appelant LoadLibraryEx avec un ou plusieurs indicateurs de LOAD_LIBRARY_SEARCH , et les répertoires ajoutés avec AddDllDirectory peuvent être supprimés en appelant RemoveDllDirectory.

Windows 7, Windows Server 2008 R2, Windows Vista et Windows Server 2008 : Pour appeler cette fonction dans une application, utilisez la fonction GetProcAddress pour récupérer son adresse à partir de Kernel32.dll. KB2533623 doivent être installés sur la plateforme cible.

Spécifications

   
Client minimal pris en charge Windows 8 [applications de bureau uniquement],KB2533623 sur Windows 7, Windows Server 2008 R2, Windows Vista et Windows Server 2008
Serveur minimal pris en charge Windows Server 2012 [applications de bureau uniquement]
Plateforme cible Windows
En-tête libloaderapi.h (inclure Windows.h)
DLL Kernel32.dll

Voir aussi

AddDllDirectory

Ordre de recherche de bibliothèque de liens dynamiques

Sécurité de la bibliothèque de liens dynamiques

LoadLibrary

LoadLibraryEx

RemoveDllDirectory