Winapi WCT WAITCHAIN\u节点\u信息联合验证
我正在使用C代码中的WCT Api(使用Winapi WCT WAITCHAIN\u节点\u信息联合验证,winapi,Winapi,我正在使用C代码中的WCT Api(使用pinvoke),我有一个问题: 调用GetThreadWaitChain时,我得到WAITCHAIN\u NODE\u INFO数组的结果: WAITCHAIN\u节点\u信息: WAITCHAIN_NODE_INFO包含两个结构的并集-这意味着只有一个值是有效的,我如何知道从WAITCHAIN_NODE_INFO结构中获取哪些信息 目前我正在检查ProcessId和ThreadId是否为0,由此我假设另一半联合已初始化 这是我的C#WAITCHAIN
pinvoke
),我有一个问题:
调用GetThreadWaitChain
时,我得到WAITCHAIN\u NODE\u INFO数组的结果:
WAITCHAIN\u节点\u信息:
WAITCHAIN_NODE_INFO包含两个结构的并集-这意味着只有一个值是有效的,我如何知道从WAITCHAIN_NODE_INFO结构中获取哪些信息
目前我正在检查ProcessId和ThreadId是否为0,由此我假设另一半联合已初始化
这是我的C#WAITCHAIN_NODE_信息结构模型:
[StructLayout(LayoutKind.Sequential)]
public struct WAITCHAIN_NODE_INFO
{
public WCT_OBJECT_TYPE ObjectType;
public WCT_OBJECT_STATUS ObjectStatus;
public _WAITCHAIN_NODE_INFO_UNION Union;
}
[StructLayout(LayoutKind.Explicit)]
public struct _WAITCHAIN_NODE_INFO_UNION
{
[FieldOffset(0)]
public _WAITCHAIN_NODE_INFO_LOCK_OBJECT LockObject;
[FieldOffset(0)]
public _WAITCHAIN_NODE_INFO_THREAD_OBJECT ThreadObject;
}
public unsafe struct _WAITCHAIN_NODE_INFO_LOCK_OBJECT
{
/*The name of the object. Object names are only available for certain object, such as mutexes. If the object does not have a name, this member is an empty string.*/
public fixed char ObjectName[WctApiConst.WCT_OBJNAME_LENGTH];
/*This member is reserved for future use.*/
public UInt64 Timeout;
/*This member is reserved for future use.*/
public UInt32 Alertable;
}
public struct _WAITCHAIN_NODE_INFO_THREAD_OBJECT
{
/*The process identifier.*/
public UInt32 ProcessId;
/*The thread identifier. For COM and ALPC, this member can be 0.*/
public UInt32 ThreadId;
/*The wait time.*/
public UInt32 WaitTime;
/*The number of context switches.*/
public UInt32 ContextSwitches;
}
有没有更好的方法来实现这一点
提前感谢如果
ObjectType
是WctThreadType
,那么您应该阅读union的ThreadObject
部分。否则,您将读取union的LockObject
部分
可以从MS提供的各种示例中收集到这种情况。例如:我重新标记了这个。互操作其实并不重要。这是一个纯粹的winapi问题。