класс 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
-
Имя первого конкретного класса, отображаемого в цепочке наследования, используемой при создании экземпляра. При использовании с другими ключевыми свойствами класса это свойство позволяет уникально идентифицировать все экземпляры этого класса и его подклассы.
Это свойство наследуется от 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 не сообщает имя процесса, в котором выполняется каждый поток. Вместо этого он сообщает идентификатор процесса, в котором выполняется поток. Чтобы вернуть имя процесса и список всех его потоков, скрипт должен:
- Подключитесь к классу Win32_Process и верните список процессов и их идентификаторы процессов.
- Временно сохраните эти сведения в массиве или объекте Dictionary.
- Для каждого идентификатора процесса верните список потоков для этого процесса, а затем отобразите имя процесса и список потоков.
Примеры
В следующем примере 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 |
|
См. также раздел