Freigeben über


SetDefaultDllDirectories-Funktion (libloaderapi.h)

Gibt einen Standardsatz von Verzeichnissen an, die beim Laden einer DLL durch den aufrufenden Prozess gesucht werden sollen. Dieser Suchpfad wird verwendet, wenn LoadLibraryEx ohne LOAD_LIBRARY_SEARCH-Flags aufgerufen wird.

Syntax

BOOL SetDefaultDllDirectories(
  [in] DWORD DirectoryFlags
);

Parameter

[in] DirectoryFlags

Die zu durchsuchenden Verzeichnisse. Dieser Parameter kann eine beliebige Kombination der folgenden Werte sein.

Wert Bedeutung
LOAD_LIBRARY_SEARCH_APPLICATION_DIR
0x00000200
Wenn dieser Wert verwendet wird, wird das Installationsverzeichnis der Anwendung durchsucht.
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
0x00001000
Dieser Wert ist eine Kombination aus LOAD_LIBRARY_SEARCH_APPLICATION_DIR, LOAD_LIBRARY_SEARCH_SYSTEM32 und LOAD_LIBRARY_SEARCH_USER_DIRS.

Dieser Wert stellt die empfohlene maximale Anzahl von Verzeichnissen dar, die eine Anwendung in den DLL-Suchpfad aufnehmen sollte.

LOAD_LIBRARY_SEARCH_SYSTEM32
0x00000800
Wenn dieser Wert verwendet wird, wird %windows%\system32 durchsucht.
LOAD_LIBRARY_SEARCH_USER_DIRS
0x00000400
Wenn dieser Wert verwendet wird, wird jeder Pfad durchsucht, der explizit mit der Funktion AddDllDirectory oder SetDllDirectory hinzugefügt wurde. Wenn mehrere Verzeichnisse hinzugefügt wurden, ist die Reihenfolge, in der diese Verzeichnisse durchsucht werden, nicht angegeben.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Der DLL-Suchpfad ist der Satz von Verzeichnissen, die nach einer DLL durchsucht werden, wenn kein vollständiger Pfad in einem LoadLibrary - oder LoadLibraryEx-Funktionsaufruf angegeben wird oder wenn ein vollständiger Pfad zur DLL angegeben wird, aber das System nach abhängigen DLLs suchen muss. Weitere Informationen zum Standardmäßigen DLL-Suchpfad finden Sie unter Dynamic-Link Library Search Order.

Der Standardmäßige DLL-Suchpfad enthält Verzeichnisse, die anfällig für einen DLL-Vorladeangriff sein können. Eine Anwendung kann die SetDefaultDllDirectories-Funktion verwenden, um einen Standard-DLL-Suchpfad für den Prozess anzugeben, der die anfälligsten Verzeichnisse eliminiert und die anderen durchsuchten Verzeichnisse einschränkt. Der Prozess-DLL-Suchpfad gilt nur für den aufrufenden Prozess und bleibt für die Lebensdauer des Prozesses erhalten.

Wenn der DirectoryFlags-Parameter mehrere Flags angibt, werden die Verzeichnisse in der folgenden Reihenfolge durchsucht:

  • Das Verzeichnis, das die DLL (LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR) enthält. Dieses Verzeichnis wird nur nach Abhängigkeiten der geladenen DLL durchsucht.
  • Das Anwendungsverzeichnis (LOAD_LIBRARY_SEARCH_APPLICATION_DIR).
  • Pfade, die dem Anwendungssuchpfad explizit mit der Funktion AddDllDirectory (LOAD_LIBRARY_SEARCH_USER_DIRS) oder der SetDllDirectory-Funktion hinzugefügt wurden. Wenn mehrere Pfade hinzugefügt wurden, ist die Reihenfolge, in der die Pfade durchsucht werden, nicht angegeben.
  • Das Systemverzeichnis (LOAD_LIBRARY_SEARCH_SYSTEM32).
Wenn SetDefaultDllDirectories keine LOAD_LIBRARY_SEARCH_USER_DIRS angibt, werden mit der AddDllDirectory-Funktion angegebene Verzeichnisse nur für LoadLibraryEx-Funktionsaufrufe verwendet, die LOAD_LIBRARY_SEARCH_USER_DIRS angeben.

Es ist nicht möglich, zum Standardmäßigen DLL-Suchpfad zu rückgängig machen oder ein verzeichnis, das mit SetDefaultDllDirectories angegeben ist, aus dem Suchpfad zu entfernen. Der Prozess-DLL-Suchpfad kann jedoch überschrieben werden, indem LoadLibraryEx mit einem oder mehreren LOAD_LIBRARY_SEARCH-Flags aufgerufen wird, und Verzeichnisse, die mit AddDllDirectory hinzugefügt wurden, können entfernt werden, indem RemoveDllDirectory aufgerufen wird.

Windows 7, Windows Server 2008 R2, Windows Vista und Windows Server 2008: Um diese Funktion in einer Anwendung aufzurufen, verwenden Sie die GetProcAddress-Funktion , um ihre Adresse aus Kernel32.dll abzurufen. KB2533623 muss auf der Zielplattform installiert sein.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 8 [nur Desktop-Apps],KB2533623 unter Windows 7, Windows Server 2008 R2, Windows Vista und Windows Server 2008
Unterstützte Mindestversion (Server) Windows Server 2012 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile libloaderapi.h (Einschließen von Windows.h)
DLL Kernel32.dll

Siehe auch

AddDllDirectory

Dynamic Link Library-Suchreihenfolge

Sicherheit der Dynamic Link-Bibliothek

LoadLibrary

LoadLibraryEx

RemoveDllDirectory