CTF 旗標

控制呼叫函式行為的旗標。 由 SHCreateThreadSHCreateThreadWithHandle 使用。 在這些函式中,這些值會定義為類型為 SHCT_FLAGS。

常數/值 Description
CTF_INSIST
0x00000001
0x00000001。 如果嘗試建立具有 CreateThread 的執行緒失敗,設定此旗標會導致 pfnThreadProc 指向的函式從呼叫執行緒同步呼叫。 只有當 pfnCallbackNull時,才能使用此旗標。
CTF_THREAD_REF
0x00000002
0x00000002。 在 pfnThreadProc指向的函式呼叫期間,保留建立執行緒的參考。 此參考必須已設定 為 SHSetThreadRef
CTF_PROCESS_REF
0x00000004
0x00000004。 在 pfnThreadProc指向的函式呼叫期間,保留 Windows 檔案總管程式的參考。 此旗標適用于 殼層延伸模組處理常式,可能需要讓 Windows 檔案總管進程提前關閉。 此動作在工作期間很有用,例如處理背景執行緒或複製檔案。 如需詳細資訊,請參閱 SHGetInstanceExplorer
CTF_COINIT_STA
0x00000008
0x00000008。 在呼叫 pfnCallback 所指向的選擇性函式或 pfnThreadProc指向的函式之前,請先將 COM 初始化為單一線程 Apartment (STA) 。 當需要初始化執行緒的 COM 時,這個旗標很有用。 COM 也會自動取消初始化。
CTF_COINIT
0x00000008
相當於 CTF_COINIT_STA。
CTF_FREELIBANDEXIT
0x00000010
0x00000010。 Internet Explorer 6 或更新版本。LoadLibrary 會在包含 pfnThreadProc 函式的 DLL 上呼叫,以防止卸載它。 pfnThreadProc傳回之後,將會使用FreeLibrary釋放 DLL,藉此遞減 DLL 參考計數。 傳遞此旗標以防止 DLL 提前卸載;例如, CoFreeUnusedLibraries。 請注意,如果傳遞此旗標, pfnThreadProc 函 式必須位於 DLL 中。 這個旗標在 Windows Vista 和更新版本中是隱含的。
CTF_REF_COUNTED
0x00000020
0x00000020。 Internet Explorer 6 或更新版本。 系統會自動為建立的執行緒建立執行緒參考,並使用 SHSetThreadRef進行設定。 pfnThreadProc傳回之後,執行緒參考會釋放,而且訊息會傳送到執行緒參考上的參考計數捨棄為零,也就是說,直到相依于所建立執行緒的執行緒釋放其參考為止。
CTF_WAIT_ALLOWCOM
0x00000040
0x00000040。 Internet Explorer 6 或更新版本。 呼叫執行緒會等候並幫浦 COM 和 SendMessage 訊息。 如果同步程式嘗試將 具有 SendMessage 的 Windows 訊息傳送至裝載于呼叫執行緒上的視窗,訊息將會成功送達。 如果同步程式嘗試使用 COM 與裝載在呼叫執行緒上的 STA 物件通訊,則函式呼叫將會成功到達預定的物件。 呼叫執行緒會開啟以重新進入弱點。 雖然呼叫執行緒可以處理 同步程式的 SendMessage 和 COM 使用,但如果其他執行緒使用 SendMessage 或 COM 來與裝載在呼叫執行緒上的物件通訊,這些可能是同步程式完成時所處理的非預期訊息或函式呼叫。
CTF_UNUSED
0x00000080
0x00000080。 Internet Explorer 7 或更新版本。 未使用。
CTF_INHERITWOW64
0x00000100
0x00000100。 Internet Explorer 7 或更新版本。 新的執行緒會繼承 Windows-on-Windows 64 位 (WOW64) 檔案系統重新導向器停用狀態。
CTF_WAIT_NO_REENTRANCY
0x00000200
0x00000200。 Windows Vista 或更新版本。 呼叫執行緒會在等候同步程式在新執行緒上執行時封鎖所有其他進程。 如果同步程式嘗試將 具有 SendMessage 的 Windows 訊息傳送至裝載于呼叫執行緒上的視窗,這會導致同步程式死結。 如果同步程式嘗試使用 COM 與裝載在呼叫執行緒上的 STA 物件通訊,這也會造成同步程式死結。 呼叫執行緒會藉由指定此旗標來保護所有重新進入考慮。
CTF_KEYBOARD_LOCALE
0x00000400
0x00000400。 Windows 7 或更新版本。 使用其繁衍之新執行緒中原始執行緒的鍵盤地區設定。
CTF_OLEINITIALIZE
0x00000800
0x00000800。 Windows 7 或更新版本。 使用所建立執行緒的單線程 Apartment (STA) 模型初始化 COM。
CTF_COINIT_MTA
0x00001000
0x00001000。 Windows 7 和更新版本。 使用所建立執行緒的多執行緒 Apartment (MTA) 模型初始化 COM。
CTF_NOADDREFLIB
0x00002000
0x00002000。 Windows 7 或更新版本。 這個旗標基本上與CTF_FREELIBANDEXIT相反。 這可避免LoadLibrary/FreeLibraryAndExitThread呼叫,這可能會導致載入器鎖定競爭。 只有在新執行緒有方法確保原始執行緒程式的程式碼仍會繼續載入時,才使用CTF_NOADDREFLIB。 這個值不應該用在 COM 物件的內容中,因為 COM 物件必須確保 DLL 保持載入 (正常,COM 會卸載 DLL) 。

備註

如果未指定任何CTF_WAIT_旗標,則呼叫執行緒會等候並傳送 SendMessage 訊息。 如果同步程式嘗試將 具有 SendMessage 的 Windows 訊息傳送至呼叫執行緒上裝載的視窗,訊息將會到達預期的視窗。 如果同步程式嘗試使用 COM 與呼叫執行緒上裝載的 STA 物件通訊,同步程式將會死結。 呼叫執行緒已開啟,可重新進入弱點。 雖然呼叫執行緒可以處理 SendMessage的同步程式使用,但如果其他執行緒使用 SendMessage 來與呼叫執行緒上裝載的視窗進行通訊,這些訊息可能會非預期。 這可能會導致在同步程式完成時加以處理。

規格需求

需求
最低支援的用戶端
Windows 2000 專業版、Windows XP、Windows 7 [僅限傳統型應用程式]
最低支援的伺服器
Windows 2000 Server [僅限傳統型應用程式]
標頭
Shlwapi.h