NtQueryInformationThread 函数 (winternl.h)
[NtQueryInformationThread 在将来的 Windows 版本中可能已更改或不可用。 应用程序应使用本主题中列出的备用函数。]
检索有关指定线程的信息。
语法
__kernel_entry NTSTATUS NtQueryInformationThread(
[in] HANDLE ThreadHandle,
[in] THREADINFOCLASS ThreadInformationClass,
[in, out] PVOID ThreadInformation,
[in] ULONG ThreadInformationLength,
[out, optional] PULONG ReturnLength
);
参数
[in] ThreadHandle
正在请求有关信息的线程的句柄。
[in] ThreadInformationClass
如果此参数是 THREADINFOCLASS 枚举的 ThreadIsIoPending 值,则函数将确定线程是否有任何挂起的 I/O 操作。
请改用公共函数 GetThreadIOPendingFlag 来获取此信息。
如果此参数是 THREADINFOCLASS 枚举的 ThreadQuerySetWin32StartAddress 值,则函数返回线程的开始地址。 请注意,在 Windows Vista 之前的 Windows 版本中,返回的开始地址仅在线程开始运行之前可靠。
如果此参数是 THREADINFOCLASS 枚举的 ThreadSubsystemInformation 值,则函数将检索指示线程子系统类型的SUBSYSTEM_INFORMATION_TYPE值。 ThreadInformation 参数指向的缓冲区应足以容纳单个SUBSYSTEM_INFORMATION_TYPE枚举。
[in, out] ThreadInformation
指向缓冲区的指针,函数在该缓冲区中写入请求的信息。 如果为 ThreadInformationClass 参数指定了 ThreadIsIoPending,则此缓冲区必须足够大,以容纳 ULONG 值,该值指示指定的线程是否有挂起的 I/O 请求。 如果此值等于零,则没有任何 I/O 操作挂起;否则,如果值为非零,则线程确实具有挂起的 I/O 操作。
请改用公共函数 GetThreadIOPendingFlag 来获取此信息。
如果为 ThreadInformationClass 参数指定了 ThreadQuerySetWin32StartAddress,则此缓冲区必须足够大,以容纳 PVOID 值,该值是线程的起始地址。
[in] ThreadInformationLength
ThreadInformation 参数指向的缓冲区的大小(以字节为单位)。
[out, optional] ReturnLength
指向变量的指针,其中函数返回所请求信息的大小。 如果函数成功,则这是 写入 ThreadInformation 参数指向的缓冲区的信息的大小,但如果缓冲区太小,则这是成功接收信息所需的最小缓冲区大小。
返回值
返回 NTSTATUS 成功或错误代码。
NTSTATUS 错误代码的形式和意义列在 DDK 中提供的 Ntstatus.h 头文件中,并在 Kernel-Mode 驱动程序体系结构/设计指南/驱动程序编程技术/日志记录错误下的 DDK 文档中进行了介绍。
注解
NtQueryInformationThread 函数在操作系统内部,可能会从一个版本的 Windows 更改为另一个版本。 为了保持应用程序的兼容性,最好改用前面提到的公共函数。
如果使用 NtQueryInformationThread,请通过 运行时动态链接访问函数。 这样,代码就有机会在操作系统中更改或删除函数时正常响应。 但是,签名更改可能无法检测到。
此函数没有关联的导入库。 必须使用 LoadLibrary 和 GetProcAddress 函数动态链接到 Ntdll.dll。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | winternl.h |
Library | ntdll.lib |
DLL | ntdll.dll |