DisableThreadLibraryCalls 関数 (libloaderapi.h)
指定したダイナミック リンク ライブラリ (DLL) のDLL_THREAD_ATTACH通知とDLL_THREAD_DETACH通知を無効にします。 これにより、一部のアプリケーションのワーキング セットのサイズを小さくできます。
構文
BOOL DisableThreadLibraryCalls(
[in] HMODULE hLibModule
);
パラメーター
[in] hLibModule
DLL_THREAD_ATTACH通知とDLL_THREAD_DETACH通知を無効にする DLL モジュールへのハンドル。 LoadLibrary、LoadLibraryEx、または GetModuleHandle 関数は、このハンドルを返します。 で GetModuleHandleNULL
を呼び出すことはできません。これは、DLL イメージではなく実行可能イメージのベース アドレスを返すからです。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 DisableThreadLibraryCalls 関数は、hModule で指定された DLL にアクティブな静的スレッド ローカル ストレージがある場合、または hModule が無効なモジュール ハンドルである場合に失敗します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
DisableThreadLibraryCalls 関数を使用すると、DLL でDLL_THREAD_ATTACHを無効にし、通知呼び出しをDLL_THREAD_DETACHできます。 これは、多くの DLL を持ち、頻繁にスレッドを作成および削除し、DLL に添付ファイル/デタッチのスレッド レベルの通知を必要としないマルチスレッド アプリケーションに便利な最適化です。 リモート プロシージャ コール (RPC) サーバー アプリケーションは、このようなアプリケーションの例です。 このようなアプリケーションでは、DLL 初期化ルーチンは、多くの場合、サービス DLL_THREAD_ATTACHとDLL_THREAD_DETACH通知にメモリ内に残ります。 通知を無効にすると、スレッドが作成または削除されるため、DLL 初期化コードはページングされないため、アプリケーションの作業コード セットのサイズが小さくなります。 最適化を実装するには、DLL のDLL_PROCESS_ATTACH コードを変更して DisableThreadLibraryCalls を呼び出します。
静的 C ランタイム ライブラリ (CRT) にリンクされている DLL からこの関数を呼び出さないでください。 静的 CRT が正常に機能するには、DLL_THREAD_ATTACH通知とDLL_THREAD_DETATCH通知が必要です。
静的 スレッド ローカル ストレージ (TLS) が有効になっている場合、この関数は最適化を実行しません。 静的 TLS は、 thread_local 変数、 __declspec( スレッド ) 変数、または関数ローカル 静的を使用する場合に有効になります。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | libloaderapi.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |