CTF 标志

控制调用函数行为的标志。 由 SHCreateThreadSHCreateThreadWithHandle 使用。 在这些函数中,这些值被定义为 SHCT_FLAGS 类型。

常量/值 说明
CTF_INSIST
0x00000001
0x00000001。 如果尝试使用 CreateThread 创建线程失败,则设置此标志将导致从调用线程同步调用 pfnThreadProc 指向的函数。 仅当 pfnCallbackNULL 时,才能使用此标志。
CTF_THREAD_REF
0x00000002
0x00000002。 在 调用 pfnThreadProc 指向的函数期间保留对创建线程的引用。 必须使用 SHSetThreadRef 设置此引用。
CTF_PROCESS_REF
0x00000004
0x00000004。 在 调用 pfnThreadProc 指向的函数期间,保留对 Windows 资源管理器进程的引用。 此标志适用于 Shell 扩展处理程序,可能需要防止 Windows 资源管理器进程过早关闭。 此操作在后台线程或复制文件等任务期间非常有用。 有关详细信息,请参阅 SHGetInstanceExplorer
CTF_COINIT_STA
0x00000008
0x00000008。 在调用 pfnCallback 指向的可选函数或 pfnThreadProc 指向的函数之前,将 COM 初始化为创建的线程的单线程单元 (STA) 。 当需要为线程初始化 COM 时,此标志非常有用。 COM 也将自动取消初始化。
CTF_COINIT
0x00000008
等效于 CTF_COINIT_STA。
CTF_FREELIBANDEXIT
0x00000010
0x00000010。 Internet Explorer 6 或更高版本。将在包含 pfnThreadProc 函数的 DLL 上调用 LoadLibrary,以防止卸载它。 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 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 或更高版本。 使用创建的线程的单线程单元 (STA) 模型初始化 COM。
CTF_COINIT_MTA
0x00001000
0x00001000。 Windows 7 及更高版本。 使用创建的线程的多线程单元 (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 Professional、Windows XP、Windows 7 [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Shlwapi.h