Winapi 出于某些原因的文档

Winapi 出于某些原因的文档,winapi,mfc,wmi,Winapi,Mfc,Wmi,我正在文档中搜索ThreadWaitReason 1..31。尤其是我对 ThreadWaitReason = 27 ThreadWaitReason = 31 我找到的是[1]:但它只在1..20之前列出。KWAIT\u REASON枚举在wdm.h中声明-您可以从中查看不同的值(27是WrResource,31是WrDispatchInt) 线程对象(KTHREAD)本身具有WaitReason字段。每次,在线程变为等待(非活动)之前,系统都会向该字段写入一些原因值。当我们在内核中直接调

我正在文档中搜索ThreadWaitReason 1..31。尤其是我对

ThreadWaitReason = 27 
ThreadWaitReason = 31

我找到的是[1]:但它只在1..20之前列出。

KWAIT\u REASON
枚举在
wdm.h
中声明-您可以从中查看不同的值(27是
WrResource
,31是
WrDispatchInt

线程对象(
KTHREAD
)本身具有
WaitReason
字段。每次,在线程变为等待(非活动)之前,系统都会向该字段写入一些原因值。当我们在内核中直接调用或自行设置WaitReason值时。当我们调用另一个函数时,这可能会导致wait-system自己设置WaitReason。例如,如果调用(
Sleep[Ex]
的内核模式实现)系统将WaitReason设置为
WrDelayExecution
。当我们调用资源函数时(例如)-系统等待原因为
WrResource
(27)。当系统交换线程时,因为它已过期-系统等待原因为
WrDispatchInt
(31)。等等

当我们使用
SystemProcessInformation
调用
NtQuerySystemInformation
时,从WaitReason调用系统值并以结构形式返回它


显然,当线程正在等待时,WaitReason具有检测主线程的能力——因此它的状态是等待(5)。否则我们会得到旧值-线程上次等待的原因
KWAIT\u原因
enum在
wdm.h
中声明-您可以从中查看不同的值(27是
WrResource
,31是
WrDispatchInt

线程对象(
KTHREAD
)本身具有
WaitReason
字段。每次,在线程变为等待(非活动)之前,系统都会向该字段写入一些原因值。当我们在内核中直接调用或自行设置WaitReason值时。当我们调用另一个函数时,这可能会导致wait-system自己设置WaitReason。例如,如果调用(
Sleep[Ex]
的内核模式实现)系统将WaitReason设置为
WrDelayExecution
。当我们调用资源函数时(例如)-系统等待原因为
WrResource
(27)。当系统交换线程时,因为它已过期-系统等待原因为
WrDispatchInt
(31)。等等

当我们使用
SystemProcessInformation
调用
NtQuerySystemInformation
时,从WaitReason调用系统值并以结构形式返回它


显然,当线程正在等待时,WaitReason具有检测主线程的能力——因此它的状态是等待(5)。否则,我们得到了旧值-上次线程等待的原因

您是否实际遇到了ThreadWaitReason字段的值27和31?顺便说一句:文档声明ThreadWaitReason值仅在ThreadState成员设置为Transition(6)时有效。当您遇到27和31时,可能不是这样。是的,我遇到了值31(有时是27)。线程状态为2。也许我从WorkerThread发送了太多的PostMessage?但是如果ThreadState与6不同,文档会说ThreadWaitReason没有意义。引用文档:仅当ThreadState成员设置为Transition(6)时,此值才有效。因此,如果ThreadState不是6,则ThreadWaitReason中的值无效(或者换句话说:它没有意义)@MichaelWalz-实际上这里是文档中的bug-
ThreadWaitReason
在线程状态为
Waiting(5)
时有效。关于
转换(6)
-我不确定您是否实际遇到了ThreadWaitReason字段的值27和31?顺便说一句:文档说明,ThreadWaitReason值仅在ThreadState成员设置为转换(6)时有效。当您遇到27和31时,可能不是这样。是的,我遇到了值31(有时是27)。线程状态为2。也许我从WorkerThread发送了太多的PostMessage?但是如果ThreadState与6不同,文档会说ThreadWaitReason没有意义。引用文档:仅当ThreadState成员设置为Transition(6)时,此值才有效。因此,如果ThreadState不是6,则ThreadWaitReason中的值无效(或者换句话说:它没有意义)@MichaelWalz-实际上这里是文档中的bug-
ThreadWaitReason
在线程状态为
Waiting(5)
时有效。关于过渡(6)
-我不确定