Win32_Thread 类
Win32_ThreadWMI 类表示执行线程。 虽然一个进程必须有一个执行线程,但进程可以创建其他线程以并行执行任务。 线程共享进程环境,因此同一进程下的多个线程使用的内存少于相同数量的进程。
以下语法从托管对象格式 (MOF) 代码中简化,包括所有继承的属性。 属性和方法按字母顺序排列,而不是按 MOF 顺序排列。
语法
[Dynamic, Provider("CIMWin32"), UUID("{8502C4DD-5FBB-11D2-AAC1-006008C78BC7}"), AMENDMENT]
class Win32_Thread : CIM_Thread
{
string Caption;
string CreationClassName;
string CSCreationClassName;
string CSName;
string Description;
uint64 ElapsedTime;
uint16 ExecutionState;
string Handle;
datetime InstallDate;
uint64 KernelModeTime;
string Name;
string OSCreationClassName;
string OSName;
uint32 Priority;
uint32 PriorityBase;
string ProcessCreationClassName;
string ProcessHandle;
uint32 StartAddress;
string Status;
uint32 ThreadState;
uint32 ThreadWaitReason;
uint64 UserModeTime;
};
成员
Win32_Thread 类具有以下类型的成员:
属性
Win32_Thread 类具有这些属性。
-
Caption
-
-
数据类型: string
-
访问类型:只读
-
限定符: MaxLen (64) 、 DisplayName (“Caption”)
对象的简短说明。
此属性继承自 CIM_ManagedSystemElement。
-
-
CreationClassName
-
在创建实例时使用的继承链中显示的第一个具体类的名称。 与 类的其他键属性一起使用时,此属性允许对此类的所有实例及其子类进行唯一标识。
此属性继承自 CIM_Thread。
-
CSCreationClassName
-
-
数据类型: string
-
访问类型:只读
-
限定符: 传播 (“CIM_Process。CSCreationClassName“) , Cim_Key, MaxLen (256)
范围计算机系统的创建类名称。
此属性继承自 CIM_Thread。
-
-
CSName
-
-
数据类型: string
-
访问类型:只读
-
限定符: 传播 (“CIM_Process。CSName“) , Cim_Key, MaxLen (256)
范围计算机系统的名称。
此属性继承自 CIM_Thread。
-
-
描述
-
-
数据类型: string
-
访问类型:只读
-
限定符: DisplayName (“Description”)
对象的说明。
此属性继承自 CIM_ManagedSystemElement。
-
-
ElapsedTime
-
-
数据类型: uint64
-
访问类型:只读
-
限定符: MappingStrings (“Win32API|性能数据结构 |PERF_OBJECT_TYPE |PerfTime“) , 单位 (”毫秒“)
此线程自创建以来给定的总执行时间(以毫秒为单位)。
有关在脚本中使用 uint64 值的详细信息,请参阅 WMI 中的脚本。
-
-
ExecutionState
-
-
数据类型: uint16
-
访问类型:只读
线程的当前操作条件。
此属性继承自 CIM_Thread。
-
-
未知 (0)
-
其他 (1)
-
就绪 (2)
-
运行 (3)
-
阻止 (4)
-
已暂停阻止 (5)
-
挂起就绪 (6)
Handle
-
数据类型: string
-
访问类型:只读
-
限定符: MaxLen (256) 、 重写 (“Handle”) 、 MappingStrings (“Win32API|工具帮助结构 |THREADENTRY32|th32ThreadID“)
线程的句柄。 默认情况下,句柄具有完全访问权限。 使用正确的安全访问,可以在接受线程句柄的任何函数中使用句柄。 根据创建时指定的继承标志,子进程可以继承此句柄。
InstallDate
-
数据类型: datetime
-
访问类型:只读
-
限定符: MappingStrings (“MIF”。DMTF |ComponentID|001.5“) , DisplayName (”安装日期“)
已安装对象。 此属性不需要值来指示已安装对象。
此属性继承自 CIM_ManagedSystemElement。
KernelModeTime
-
数据类型: uint64
-
访问类型:只读
-
限定符: 重写 (“KernelModeTime”) , MappingStrings (“Win32API|性能数据结构 |PERF_OBJECT_TYPE|PrivilegedTime“) , 单位 (”100 纳秒“)
内核模式下的时间,以 100 纳秒为单位。 如果此信息不可用,则应使用值 0 (零) 。
有关在脚本中使用 uint64 值的详细信息,请参阅 WMI 中的脚本。
名称
-
数据类型: string
-
访问类型:只读
-
限定符: DisplayName (“Name”)
对象的已知标签。 子类化后,属性可以重写为键属性。
此属性继承自 CIM_ManagedSystemElement。
OSCreationClassName
-
数据类型: string
-
访问类型:只读
-
限定符: 传播 (“CIM_Process。OSCreationClassName“) , Cim_Key, MaxLen (256)
范围操作系统的创建类名称。
此属性继承自 CIM_Thread。
OSName
-
数据类型: string
-
访问类型:只读
-
限定符: 传播 (“CIM_Process。OSName“) , Cim_Key, MaxLen (256)
范围操作系统的名称。
此属性继承自 CIM_Thread。
优先级
-
数据类型: uint32
-
访问类型:只读
-
限定符: 替代 (“Priority”) , MappingStrings (“Win32API|工具帮助结构 |THREADENTRY32|tpDeltaPri“)
线程的动态优先级。 每个线程都有一个动态优先级,计划程序使用该优先级来确定要执行的线程。 最初,线程的动态优先级与其基本优先级相同。 系统可以提升和降低动态优先级,以确保其响应 (保证没有线程因处理器时间) 不足。 系统不会提升基本优先级在 16 到 31 之间的线程的优先级。 只有基优先级介于 0 和 15 之间的线程才会获得动态优先级提升。 数字越大,优先级越高。
PriorityBase
-
数据类型: uint32
-
访问类型:只读
-
限定符: MappingStrings (“Win32API|性能数据结构 |PERF_OBJECT_TYPE |PerfPriorityBase“)
线程的当前基优先级。 如果线程正在处理用户输入,则操作系统可能会将线程的动态优先级提高到基本优先级之上;如果线程变为计算绑定,则将其降低到基本优先级。 PriorityBase 属性的值可以介于 0 和 31 之间。
ProcessCreationClassName
-
数据类型: string
-
访问类型:只读
-
限定符: 传播 (“CIM_Process。CreationClassName“) , Cim_Key, MaxLen (256)
范围进程 CreationClassName 属性的值。
此属性继承自 CIM_Thread。
ProcessHandle
-
数据类型: string
-
访问类型:只读
-
限定符: MaxLen (256) 、 重写 (“ProcessHandle”) 、 传播 (“CIM_Process。Handle“) , MappingStrings (”Win32API|工具帮助结构 |THREADENTRY32|th32OwnerProcessID“)
创建线程的进程。 此属性的内容可由 Windows 应用程序编程接口 (API) 元素使用。
StartAddress
-
数据类型: uint32
-
访问类型:只读
-
限定符: MappingStrings (“WIn32API|Thread 对象|LPTHREAD_START_ROUTINE|lpStartAddress“)
线程的起始地址。 由于对线程具有适当访问权限的任何应用程序都可以更改线程的上下文,因此此值可能只是线程起始地址的近似值。
Status
-
数据类型: string
-
访问类型:只读
-
限定符: MaxLen (10) 、 DisplayName (“Status”)
对象的当前状态。 可以定义各种操作状态和非操作状态。 操作状态包括:“正常”、“已降级”和“预失败”, (启用 SMART 的硬盘驱动器等元素可能正常运行,但预测近期) 故障。 非操作状态包括:“错误”、“正在启动”、“正在停止”和“服务”。 后者(“服务”)可以在镜像磁盘重新同步、重新加载用户权限列表或其他管理工作期间应用。 并非所有此类工作都处于联机状态,但托管元素既不是“正常”,也不是处于其他状态之一。
此属性继承自 CIM_ManagedSystemElement。
有效值为:
OK (“OK”)
错误 (“错误”)
已降级 (“已降级”)
未知 (“未知”)
Pred Fail (“Pred Fail”)
正在启动 (“正在启动”)
正在停止 (“停止”)
服务 (“Service”)
压力 (“有压力”)
NonRecover (“NonRecover”)
无联系人 (“无联系人”)
Lost Comm (“Lost Comm”)
ThreadState
-
数据类型: uint32
-
访问类型:只读
-
限定符: MappingStrings (“Win32API|线程状态“)
线程的当前执行状态。
初始化 (0)
已初始化 — 微内核识别它。
就绪 (1)
就绪 — 它已准备好在下一个可用的处理器上运行。
运行 (2)
正在运行 — 它正在执行。
备用 (3)
待机 - 它即将运行,一次只能有一个线程处于此状态。
已终止 (4)
已终止 — 已完成执行。
正在等待 (5)
正在等待 — 处理器尚未准备就绪,准备就绪后,将重新计划它。
转换 (6)
转换 - 线程正在等待处理器以外的资源,
未知 (7)
未知 — 线程状态未知。
ThreadWaitReason
-
数据类型: uint32
-
访问类型:只读
-
限定符: MappingStrings (“Win32API|线程等待原因“)
线程等待的原因。 仅当 ThreadState 成员设置为 Transition (6) 时,此值才有效。 事件对允许与受保护的子系统通信。
执行 (0)
FreePage (1)
FreePage
PageIn (2)
PoolAllocation (3)
ExecutionDelay (4)
FreePage (5)
PageIn (6)
行政 (7)
FreePage (8)
PageIn (9)
PoolAllocation (10)
ExecutionDelay (11)
FreePage (12)
PageIn (13)
EventPairHigh (14)
EventPairLow (15)
LPCReceive (16)
LPCReply (17)
VirtualMemory (18)
PageOut (19)
未知 (20)
UserModeTime
-
数据类型: uint64
-
访问类型:只读
-
限定符: 重写 (“UserModeTime”) , MappingStrings (“Win32API|性能数据结构 |PERF_OBJECT_TYPE |UserTime“) , 单位 (”100纳秒“)
用户模式下的时间(以 100 纳秒为单位)。 如果此信息不可用,应使用值 0 (零) 。
有关在脚本中使用 uint64 值的详细信息,请参阅 在 WMI 中编写脚本。
备注
Win32_Thread 类派生自 CIM_Thread。
概述
对于日常监视,通常没有理由详细列出线程及其关联属性。 计算机在一天中创建和删除数千个线程,除了编写软件的开发人员,这些创建或删除操作很少对任何人有意义。
但是,在排查应用程序问题时,跟踪进程的单个线程可以确定何时创建线程、何时 (或) 销毁线程。 由于已创建但未销毁的线程会导致内存泄漏,因此跟踪单个线程对于支持技术人员来说可能很有用。 同样,确定线程优先级有助于查明那些以异常高优先级运行而抢占其他线程和其他进程所需的 CPU 周期的线程。
使用 Win32_Thread
如前面的语法块所暗示的那样, Win32_Thread 类不报告每个线程运行的进程的名称。 相反,它会报告线程运行所依据的进程 ID。 若要返回进程的名称及其所有线程的列表,脚本必须:
- 连接到 Win32_Process 类并返回进程及其进程 ID 的列表。
- 暂时将此信息存储在数组或 Dictionary 对象中。
- 对于每个进程 ID,返回该进程的线程列表,然后显示进程名称和线程列表。
示例
以下 VBScript 示例监视计算机上运行的线程。
Set objDictionary = CreateObject("Scripting.Dictionary")
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process")
For Each objProcess in colProcesses
objDictionary.Add objProcess.ProcessID, objProcess.Name
Next
Set colThreads = objWMIService.ExecQuery("SELECT * FROM Win32_Thread")
For Each objThread in colThreads
intProcessID = CInt(objThread.ProcessHandle)
strProcessName = objDictionary.Item(intProcessID)
Wscript.Echo strProcessName & VbTab & objThread.ProcessHandle & _
VbTab & objThread.Handle & VbTab & objThread.ThreadState
Next
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows Vista |
最低受支持的服务器 |
Windows Server 2008 |
命名空间 |
Root\CIMV2 |
MOF |
|
DLL |
|
另请参阅