THREADINFOCLASS


The THREADINFOCLASS is an enumeration whose values are intended as input to the ZwQueryInformationThread and ZwSetInformationThread functions. Different values select different types of information to query or set.

Documentation Status
A C-language definition of the THREADINFOCLASS enumeration has been publicly available in the NTDDK.H header since at least the Device Driver Kit (DDK) for Windows NT 3.51. It there supported the declaration of the ZwSetInformationThread function which is exported from both the kernel and NTDLL in version 3.10 and higher but was not formally documented even for kernel-mode programming until some time after the Windows Driver Kit (WDK) for Windows 7 in 2009. Such kernel-mode documentation as exists of either function presents only a handful of the defined values. In the WDK for Windows 10, even the definition in NTDDK.H has become selective.

Microsoft’s first formal documentation of either THREADINFOCLASS or of any function that uses it was in the Software Development Kit (SDK) for user-mode programming. A WINTERNL.H file was added to the SDK in 2002, apparently for Microsoft’s compliance with a settlement concerning unfair use of internal Windows APIs by “middleware” products such as, but in no way limited to, Internet Explorer. The file presents a greatly reduced C-language definition, just of the ThreadIsIoPending case, which contemporaneous documentation of the NtQueryInformationThread function quite rightly noted would better be accessed via the documented API function GetThreadPendingIoFlag. This documentation later added ThreadQuerySetWin32StartAddress to its description, though apparently without this case ever making it to the definition in the header.

As for the values that are added for Windows 10 but which the definition in the contemporaneous WDK skips, these are knowable from type information in symbol files. The surprise, however, is which symbol files—not for the kernel, where the enumeration is interpreted and the relevant functions are implemented, nor even NTDLL, but for various higher-level user-mode DLLs. The most conspicuous is URLMON.DLL, for it is a component of Internet Explorer, i.e., of the most prominent “middleware” that compelled even the grudgingly partial disclosure in 2002. The symbol files that have been publicly available for URLMON since 2012 show that it is built not with the reduced THREADINFOCLASS from WINTERNL.H but with the whole thing. However URLMON was built in the years when Microsoft’s compliance with the settlement was reviewed by—it might be hoped—competent regulators, it is now built with more knowledge of low-level Windows than Microsoft publishes even for kernel-mode device driver programmers. Do not tell me that there was not at Microsoft somewhere some time someone who enjoyed mocking the government and courts over this. (I say this as criticism of the latter very much more than of Microsoft.)

Enumeration
Of the many defined cases, some can be used successfully only to query or only to set. Some can’t usefully be called either way—at least, not in all versions. The present purpose however is not to show which values are implemented non-trivially in which versions, but which values are defined in which versions, as much as can be known.

Numeric Value    Symbolic Name    Versions
0x00    ThreadBasicInformation    all
0x01    ThreadTimes    all
0x02    ThreadPriority    all
0x03    ThreadBasePriority    all
0x04    ThreadAffinityMask    all
0x05    ThreadImpersonationToken    all
0x06    ThreadDescriptorTableEntry    all
0x07    ThreadEnableAlignmentFaultFixup    all
0x08    ThreadEventPair    3.10 to 4.0
ThreadEventPair_Reusable    5.0 and higher
0x09    ThreadQuerySetWin32StartAddress    all
0x0A    unknown    3.10 only
0x0B (3.10);
0x0A    ThreadZeroTlsCell    all
0x0B    ThreadPerformanceCount    3.51 and higher
0x0C    ThreadAmILastThread    3.51 and higher
0x0D    ThreadIdealProcessor    4.0 and higher
0x0E    ThreadPriorityBoost    4.0 and higher
0x0F    ThreadSetTlsArrayAddress    4.0 and higher
0x10    ThreadIsIoPending    5.0 and higher
0x11    ThreadHideFromDebugger    5.0 and higher
0x12    ThreadBreakOnTermination    5.2 and higher
0x13    ThreadSwitchLegacyState    5.2 from Windows Server 2003 SP1, and higher
0x14    ThreadIsTerminated    5.2 from Windows Server 2003 SP1, and higher
0x15    ThreadLastSystemCall    6.0 and higher
0x16    ThreadIoPriority    6.0 and higher
0x17    ThreadCycleTime    6.0 and higher
0x18    ThreadPagePriority    6.0 and higher
0x19    ThreadActualBasePriority    6.0 and higher
0x1A    ThreadTebInformation    6.0 and higher
0x1B    ThreadCSwitchMon    6.0 and higher
0x1C    ThreadCSwitchPmu    6.1 and higher
0x1D    ThreadWow64Context    6.1 and higher
0x1E    ThreadGroupInformation    6.1 and higher
0x1F    ThreadUmsInformation    6.1 and higher
0x20    ThreadCounterProfiling    6.1 and higher
0x21    ThreadIdealProcessorEx    6.1 and higher
0x22    ThreadCpuAccountingInformation    6.2 and higher
0x23    ThreadSuspendCount    6.3 and higher
0x24    ThreadHeterogeneousCpuPolicy    10.0 and higher
0x25    ThreadContainerId    10.0 and higher
0x26    ThreadNameInformation    10.0 and higher
0x27    ThreadSelectedCpuSets    10.0 and higher
0x28    ThreadSystemThreadInformation    10.0 and higher
0x29    ThreadActualGroupAffinity    10.0 and higher
     MaxThreadInfoClass    all

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值