getThreadWaitChain 函数 (wct.h)
检索指定线程的等待链。
语法
BOOL GetThreadWaitChain(
[in] HWCT WctHandle,
[in, optional] DWORD_PTR Context,
[in] DWORD Flags,
[in] DWORD ThreadId,
[in, out] LPDWORD NodeCount,
[out] PWAITCHAIN_NODE_INFO NodeInfoArray,
[out] LPBOOL IsCycle
);
参数
[in] WctHandle
由 OpenThreadWaitChainSession 函数创建的 WCT 会话的句柄。
[in, optional] Context
指向要传递给异步会话的回调函数的应用程序定义的上下文结构的指针。
[in] Flags
等待链检索选项。 此参数可以是下列多个值之一。
值 | 含义 |
---|---|
|
枚举进程外 MTA COM 服务器的所有线程以查找正确的线程标识符。 |
|
从其他进程检索关键节信息。 |
|
遵循等待链进入其他进程。 否则,该函数报告不同进程中的第一个线程,但不检索其他信息。 |
[in] ThreadId
线程的标识符。
[in, out] NodeCount
输入时,一个从 1 到 WCT_MAX_NODE_COUNT的数字,指定等待链中的节点数。 返回时,检索到的节点数。 如果数组不能包含等待链的所有节点,则函数会失败, GetLastError 将返回ERROR_MORE_DATA,并且此参数接收包含所有节点所需的数组元素数。
对于异步会话,检查传递给回调函数的值。 在返回回调函数之前,不要释放变量。
[out] NodeInfoArray
接收等待链 的WAITCHAIN_NODE_INFO 结构的数组。
对于异步会话,检查传递给回调函数的值。 在返回回调函数之前,请勿释放数组。
[out] IsCycle
如果函数检测到死锁,则此变量设置为 TRUE;否则,它设置为 FALSE。
对于异步会话,检查传递给回调函数的值。 在返回回调函数之前,不要释放变量。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 若要检索扩展的错误信息,请调用 GetLastError。
返回代码 | 说明 |
---|---|
|
调用方没有足够的权限打开目标线程。 |
|
其中一个输入参数无效。 |
|
WCT 会话以异步模式打开。 结果将通过 WaitChainCallback 回调函数返回。 |
|
NodeInfoArray 缓冲区不够大,无法包含等待链中的所有节点。 NodeCount 参数包含链中的节点数。 返回的等待链仍然有效。 |
|
操作系统未提供此服务。 |
|
无法找到指定的线程。 |
|
节点数超过 WCT_MAX_NODE_COUNT。 返回的等待链仍然有效。 |
注解
如果会话是异步的,则函数返回 FALSE,GetLastError 返回ERROR_IO_PENDING。 若要获取结果,请参阅 WaitChainCallback 回调函数。
如果未阻止指定的线程,或者在不受支持的同步元素上被阻止,则函数在 NodeInfoArray 中返回单个项。
调用方必须具有SE_DEBUG_NAME权限。 如果调用方的权限不足,则如果无法访问第一个线程,函数将失败。 否则,数组中的最后一个节点的 ObjectStatus 成员将设置为 WctStatusNoAcces。
如果数组中的任何节点子集形成一个循环,该函数会将 IsCycle 参数设置为 TRUE。
等待链信息是动态的;调用函数时,它是正确的,但到调用方查看它时,它可能已过期。
示例
有关示例,请参阅 使用 WCT。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | wct.h |
Library | Advapi32.lib |
DLL | Advapi32.dll |