DisableThreadLibraryCalls-Funktion (libloaderapi.h)

Deaktiviert die DLL_THREAD_ATTACH und DLL_THREAD_DETACH Benachrichtigungen für die angegebene DLL (Dynamic Link Library). Dadurch kann die Größe des Arbeitssatzes für einige Anwendungen reduziert werden.

Syntax

BOOL DisableThreadLibraryCalls(
  [in] HMODULE hLibModule
);

Parameter

[in] hLibModule

Ein Handle für das DLL-Modul, für das die DLL_THREAD_ATTACH- und DLL_THREAD_DETACH-Benachrichtigungen deaktiviert werden sollen. Die Funktion LoadLibrary, LoadLibraryEx oder GetModuleHandle gibt dieses Handle zurück. Beachten Sie, dass Sie GetModuleHandle nicht mit NULL aufrufen können, da dadurch die Basisadresse des ausführbaren Images und nicht das DLL-Image zurückgegeben wird.

Rückgabewert

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

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Die DisableThreadLibraryCalls-Funktion schlägt fehl, wenn die von hModule angegebene DLL über einen aktiven lokalen statischen Threadspeicher verfügt oder wenn hModule ein ungültiges Modulhandle ist. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Mit der Funktion DisableThreadLibraryCalls kann eine DLL die DLL_THREAD_ATTACH deaktivieren und Benachrichtigungsaufrufe DLL_THREAD_DETACH. Dies kann eine nützliche Optimierung für Multithreadanwendungen sein, die über viele DLLs verfügen, häufig Threads erstellen und löschen und deren DLLs diese Benachrichtigungen auf Threadebene zum Anfügen/Trennen nicht benötigen. Eine RPC-Serveranwendung (Remote Procedure Call) ist ein Beispiel für eine solche Anwendung. In diesen Anwendungen verbleiben DLL-Initialisierungsroutinen häufig im Arbeitsspeicher, um DLL_THREAD_ATTACH und DLL_THREAD_DETACH Benachrichtigungen zu verwalten. Durch Deaktivieren der Benachrichtigungen wird der DLL-Initialisierungscode nicht ausgelagert, da ein Thread erstellt oder gelöscht wird, wodurch die Größe des funktionierenden Codesatzes der Anwendung reduziert wird. Um die Optimierung zu implementieren, ändern Sie den DLL_PROCESS_ATTACH Code einer DLL so, dass DisableThreadLibraryCalls aufgerufen wird.

Rufen Sie diese Funktion nicht aus einer DLL auf, die mit der statischen C-Laufzeitbibliothek (CRT) verknüpft ist. Die statische CRT erfordert DLL_THREAD_ATTACH und DLL_THREAD_DETATCH Benachrichtigungen, um ordnungsgemäß zu funktionieren.

Diese Funktion führt keine Optimierungen durch, wenn statischer lokaler Threadspeicher (TLS) aktiviert ist. Statisches TLS ist aktiviert, wenn thread_local Variablen, __declspec ( Thread ) variablen oder funktionslokal statisch verwendet werden.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile libloaderapi.h (Einschließen von Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

Dynamic-Link Library Entry-Point-Funktion

Dynamic-Link-Bibliotheksfunktionen

FreeLibraryAndExitThread

In VBS-Enclaves verfügbare Vertdll-APIs