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)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

動態連結庫 Entry-Point 函式

動態連結庫函式

FreeLibraryAndExitThread

VBS 記憶體保護區中可用的 Vertdll API