DisableThreadLibraryCalls 函数 (libloaderapi.h)

禁用指定动态链接库 (DLL) 的DLL_THREAD_ATTACH和DLL_THREAD_DETACH通知。 这可以减少某些应用程序的工作集的大小。

语法

BOOL DisableThreadLibraryCalls(
  [in] HMODULE hLibModule
);

参数

[in] hLibModule

要为其禁用DLL_THREAD_ATTACH和DLL_THREAD_DETACH通知的 DLL 模块的句柄。 LoadLibraryLoadLibraryExGetModuleHandle 函数返回此句柄。 请注意,不能使用 NULL 调用 GetModuleHandle,因为这将返回可执行映像的基址,而不是 DLL 映像。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 如果 hModule 指定的 DLL 具有活动的静态线程本地存储,或者 hModule 是无效的模块句柄,则 DisableThreadLibraryCalls 函数将失败。 要获得更多的错误信息,请调用 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 运行时库的 DLL (CRT) 调用此函数。 静态 CRT 需要DLL_THREAD_ATTACH和DLL_THREAD_DETATCH通知才能正常工作。

如果启用了静态 线程本地存储 (TLS) ,此函数不会执行任何优化。 使用 thread_local 变量、 __declspec (线程 ) 变量或函数本地静态时启用 静态 TLS。

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 libloaderapi.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

动态链接库 Entry-Point 函数

动态链接库函数

FreeLibraryAndExitThread

VBS enclave 中可用的 Vertdll API