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

数据类型: string

访问类型:只读

限定符: Cim_KeyMaxLen (256)

在创建实例时使用的继承链中显示的第一个具体类的名称。 与 类的其他键属性一起使用时,此属性允许对此类的所有实例及其子类进行唯一标识。

此属性继承自 CIM_Thread

CSCreationClassName

数据类型: string

访问类型:只读

限定符: 传播 (“CIM_ProcessCSCreationClassName“) , Cim_KeyMaxLen (256)

范围计算机系统的创建类名称。

此属性继承自 CIM_Thread

CSName

数据类型: string

访问类型:只读

限定符: 传播 (“CIM_ProcessCSName“) , Cim_KeyMaxLen (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_ProcessOSCreationClassName“) , Cim_KeyMaxLen (256)

范围操作系统的创建类名称。

此属性继承自 CIM_Thread

OSName

数据类型: string

访问类型:只读

限定符: 传播 (“CIM_ProcessOSName“) , Cim_KeyMaxLen (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_ProcessCreationClassName“) , Cim_KeyMaxLen (256)

范围进程 CreationClassName 属性的值。

此属性继承自 CIM_Thread

ProcessHandle

数据类型: string

访问类型:只读

限定符: MaxLen (256) 、 重写 (“ProcessHandle”) 、 传播 (“CIM_ProcessHandle“) , 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。 若要返回进程的名称及其所有线程的列表,脚本必须:

  1. 连接到 Win32_Process 类并返回进程及其进程 ID 的列表。
  2. 暂时将此信息存储在数组或 Dictionary 对象中。
  3. 对于每个进程 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
CIMWin32.mof
DLL
CIMWin32.dll

另请参阅

CIM_Thread

操作系统类