Funzione SetDefaultDllDirectories (libloaderapi.h)

Specifica un set predefinito di directory da cercare quando il processo chiamante carica una DLL. Questo percorso di ricerca viene usato quando LoadLibraryEx viene chiamato senza flag di LOAD_LIBRARY_SEARCH .

Sintassi

BOOL SetDefaultDllDirectories(
  [in] DWORD DirectoryFlags
);

Parametri

[in] DirectoryFlags

Directory da cercare. Questo parametro può essere una combinazione dei valori seguenti.

Valore Significato
LOAD_LIBRARY_SEARCH_APPLICATION_DIR
0x00000200
Se questo valore viene usato, viene eseguita la ricerca nella directory di installazione dell'applicazione.
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
0x00001000
Questo valore è una combinazione di LOAD_LIBRARY_SEARCH_APPLICATION_DIR, LOAD_LIBRARY_SEARCH_SYSTEM32 e LOAD_LIBRARY_SEARCH_USER_DIRS.

Questo valore rappresenta il numero massimo consigliato di directory che un'applicazione deve includere nel percorso di ricerca dll.

LOAD_LIBRARY_SEARCH_SYSTEM32
0x00000800
Se questo valore viene usato, viene eseguita la ricerca di %windows%\system32.
LOAD_LIBRARY_SEARCH_USER_DIRS
0x00000400
Se questo valore viene usato, viene eseguito il ricerca di qualsiasi percorso aggiunto in modo esplicito usando la funzione AddDllDirectory o SetDllDirectory. Se sono state aggiunte più directory, l'ordine in cui tali directory vengono ricercate non è specificato.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Il percorso di ricerca dll è il set di directory che vengono ricercate per una DLL quando un percorso completo non è specificato in una chiamata di funzione LoadLibrary o LoadLibraryEx o quando viene specificato un percorso completo della DLL, ma il sistema deve cercare DLL dipendenti. Per altre informazioni sul percorso di ricerca DLL standard, vedere Ordine di ricerca libreria di collegamento dinamico.

Il percorso di ricerca DLL standard contiene directory che possono essere vulnerabili a un attacco di pre-caricamento dll. Un'applicazione può usare la funzione SetDefaultDllDirectories per specificare un percorso di ricerca DLL predefinito per il processo che elimina le directory più vulnerabili e limita le altre directory che vengono ricercate. Il percorso di ricerca dll del processo si applica solo al processo di chiamata e persiste per la vita del processo.

Se il parametro DirectoryFlags specifica più flag, le directory vengono eseguite nella ricerca nell'ordine seguente:

  • Directory contenente la DLL (LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR). Questa directory viene cercata solo per le dipendenze della DLL caricata.
  • Directory dell'applicazione (LOAD_LIBRARY_SEARCH_APPLICATION_DIR).
  • Percorsi aggiunti in modo esplicito al percorso di ricerca dell'applicazione con la funzione AddDllDirectory (LOAD_LIBRARY_SEARCH_USER_DIRS) o la funzione SetDllDirectory . Se sono stati aggiunti più percorsi, l'ordine in cui vengono cercati i percorsi non è specificato.
  • Directory di sistema (LOAD_LIBRARY_SEARCH_SYSTEM32).
Se SetDefaultDllDirectories non specifica LOAD_LIBRARY_SEARCH_USER_DIRS, le directory specificate con la funzione AddDllDirectory vengono usate solo per le chiamate di funzione LoadLibraryEx che specificano LOAD_LIBRARY_SEARCH_USER_DIRS.

Non è possibile ripristinare il percorso di ricerca DLL standard o rimuovere qualsiasi directory specificata con SetDefaultDllDirectories dal percorso di ricerca. Tuttavia, il percorso di ricerca DLL del processo può essere sottoposto a override chiamando LoadLibraryEx con uno o più flag LOAD_LIBRARY_SEARCH e le directory aggiunte con AddDllDirectory possono essere rimosse chiamando RemoveDllDirectory.

Windows 7, Windows Server 2008 R2, Windows Vista e Windows Server 2008: Per chiamare questa funzione in un'applicazione, usare la funzione GetProcAddress per recuperare l'indirizzo da Kernel32.dll. KB2533623 deve essere installato nella piattaforma di destinazione.

Requisiti

   
Client minimo supportato Windows 8 [solo app desktop],KB2533623 in Windows 7, Windows Server 2008 R2, Windows Vista e Windows Server 2008
Server minimo supportato Windows Server 2012 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione libloaderapi.h (includere Windows.h)
DLL Kernel32.dll

Vedere anche

AddDllDirectory

Ordine di ricerca libreria di collegamento dinamico

Sicurezza della libreria di collegamento dinamico

LoadLibrary

LoadLibraryEx

RemoveDllDirectory