Поделиться через


класс Win32_Thread

Класс WMIWin32_Thread представляет поток выполнения. Хотя процесс должен иметь один поток выполнения, процесс может создавать другие потоки для параллельного выполнения задач. Потоки совместно используют среду процессов, поэтому несколько потоков в одном процессе используют меньше памяти, чем одно и то же количество процессов.

Следующий пример синтаксиса — упрощенный 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 имеет следующие типы членов:

Элемент Property

Класс Win32_Thread имеет эти свойства.

Caption

Тип данных: string

Тип доступа: только для чтения

Квалификаторы: MaxLen (64), DisplayName ("Caption")

Краткое описание объекта.

Это свойство наследуется от CIM_ManagedSystemElement.

CreationClassName

Тип данных: string

Тип доступа: только для чтения

Квалификаторы: Cim_Key, MaxLen (256)

Имя первого конкретного класса, отображаемого в цепочке наследования, используемой при создании экземпляра. При использовании с другими ключевыми свойствами класса это свойство позволяет уникально идентифицировать все экземпляры этого класса и его подклассы.

Это свойство наследуется от 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 ("Описание")

Описание объекта.

Это свойство наследуется от CIM_ManagedSystemElement.

ElapsedTime

Тип данных: uint64

Тип доступа: только для чтения

Квалификаторы: MappingStrings ("Win32API| | Структуры данных о производительности| PERF_OBJECT_TYPE| PerfTime"), единицы измерения ("миллисекунда")

Общее время выполнения (в миллисекундах), заданное этому потоку с момента его создания.

Дополнительные сведения об использовании значений uint64 в скриптах см. в разделе Скрипты в WMI.

ExecutionState

Тип данных: uint16

Тип доступа: только для чтения

Текущее рабочее состояние потока.

Это свойство наследуется от CIM_Thread.

Неизвестно (0)

Другое (1)

Готово (2)

Выполняется (3)

Заблокировано (4)

Приостановлено заблокировано (5)

Приостановка готовности (6)

Дескриптор

Тип данных: string

Тип доступа: только для чтения

Квалификаторы: MaxLen (256), Override ("Handle"), MappingStrings ("Win32API| | Структуры справки инструментов | THREADENTRY32|th32ThreadID")

Дескриптор в поток. По умолчанию дескриптор имеет полные права доступа. При правильном доступе безопасности дескриптор можно использовать в любой функции, принимающей дескриптор потока. В зависимости от флага наследования, указанного при его создании, этот дескриптор может наследоваться дочерними процессами.

InstallDate

Тип данных: datetime

Тип доступа: только для чтения

Квалификаторы: MappingStrings ("MIF. DMTF| ComponentID|001.5"), DisplayName ("Дата установки")

Объект установлен. Этому свойству не требуется значение, указывающее, что объект установлен.

Это свойство наследуется от CIM_ManagedSystemElement.

KernelModeTime

Тип данных: uint64

Тип доступа: только для чтения

Квалификаторы: Override ("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

Тип доступа: только для чтения

Квалификаторы: Override ("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), Override ("ProcessHandle"), Распространение ("CIM_Process. Handle"), MappingStrings (Win32API| Структуры справки по инструментам | THREADENTRY32|th32OwnerProcessID")

Процесс, создавший поток. Содержимое этого свойства может использоваться элементами API Windows.

StartAddress

Тип данных: uint32

Тип доступа: только для чтения

Квалификаторы: MappingStrings ("WIn32API| Объект thread| LPTHREAD_START_ROUTINE|lpStartAddress")

Начальный адрес потока. Так как любое приложение с соответствующим доступом к потоку может изменить контекст потока, это значение может быть только аппроксимацией начального адреса потока.

Состояние

Тип данных: string

Тип доступа: только для чтения

Квалификаторы: MaxLen (10), DisplayName ("Status")

Текущее состояние объекта. Можно определить различные операционные и нерабочие состояния. Операционные состояния: "ОК", "Понижено" и "Сбой pred" (элемент, например жесткий диск с поддержкой SMART, может работать правильно, но прогнозирует сбой в ближайшем будущем). К нерабочим состояниям относятся: "Ошибка", "Запуск", "Остановка" и "Служба". Последняя служба может применяться во время зеркало повторного изменения диска, перезагрузки списка разрешений пользователя или других административных действий. Не вся такая работа находится в сети, но управляемый элемент не является ни "ОК", ни в одном из других состояний.

Это свойство наследуется от CIM_ManagedSystemElement.

Значения качества производительности:

ОК ("ОК")

Error ("Error")

Пониженный ("Пониженный")

Unknown ("Unknown")

Pred Fail ("Pred Fail")

Запуск ("Запуск")

Остановка ("Остановка")

Служба ("Служба")

Подчеркнуто ("подчеркнуто")

NonRecover ("NonRecover")

Нет контакта ("Нет контакта")

Lost Comm ("Lost Comm")

ThreadState

Тип данных: uint32

Тип доступа: только для чтения

Квалификаторы: MappingStrings ("Win32API| Состояние потока")

Текущее состояние выполнения для потока.

Инициализировано (0)

Initialized — распознается микрояридом.

Готово (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

Тип доступа: только для чтения

Квалификаторы: Override ("UserModeTime"), MappingStrings ("Win32API| | Структуры данных о производительности| PERF_OBJECT_TYPE| UserTime"), единицы измерения ("100 наносекунд")

Время в пользовательском режиме в единицах 100 наносекунд. Если эти сведения недоступны, следует использовать значение 0 (ноль).

Дополнительные сведения об использовании значений uint64 в скриптах см. в разделе Создание скриптов в WMI.

Комментарии

Класс Win32_Thread является производным от CIM_Thread.

Обзор

Для повседневного мониторинга, как правило, нет никаких оснований для подробного списка потоков и связанных с ними свойств. Компьютеры создают и удаляют тысячи потоков в течение дня, и лишь немногие из этих творений или удалений имеют смысл для тех, кто не является разработчиком программного обеспечения.

Однако при устранении неполадок с приложением отслеживание отдельных потоков для процесса позволяет определить, когда создаются потоки и когда (или если) они уничтожаются. Так как созданные, но не уничтоженные потоки вызывают утечку памяти, отслеживание отдельных потоков может быть полезной информацией для специалистов службы поддержки. Аналогичным образом, определение приоритетов потоков может помочь точно определить потоки, которые, выполняясь с аномально высоким приоритетом, вытесняют циклы ЦП, необходимые для других потоков и других процессов.

Использование Win32_Thread

Как указано в предыдущем блоке синтаксиса, класс Win32_Thread не сообщает имя процесса, в котором выполняется каждый поток. Вместо этого он сообщает идентификатор процесса, в котором выполняется поток. Чтобы вернуть имя процесса и список всех его потоков, скрипт должен:

  1. Подключитесь к классу Win32_Process и верните список процессов и их идентификаторы процессов.
  2. Временно сохраните эти сведения в массиве или объекте Dictionary.
  3. Для каждого идентификатора процесса верните список потоков для этого процесса, а затем отобразите имя процесса и список потоков.

Примеры

В следующем примере 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

Классы операционной системы