Freigeben über


Win32_Thread-Klasse

Die Win32_ThreadWMI-Klasse stellt einen Ausführungsthread dar. Während ein Prozess über einen Ausführungsthread verfügen muss, kann der Prozess andere Threads erstellen, um Aufgaben parallel auszuführen. Threads teilen sich die Prozessumgebung, sodass mehrere Threads unter demselben Prozess weniger Arbeitsspeicher als die gleiche Anzahl von Prozessen verwenden.

Die folgende Syntax wurde aus MOF-Code (Managed Object Format, verwaltetes Objektformat) vereinfacht und enthält alle geerbten Eigenschaften. Eigenschaften und Methoden befinden sich in alphabetischer Reihenfolge, nicht in MOF-Reihenfolge.

Syntax

[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;
};

Member

Die Win32_Thread-Klasse verfügt über die folgenden Membertypen:

Eigenschaften

Die Win32_Thread-Klasse verfügt über diese Eigenschaften.

Caption

Datentyp: Zeichenfolge

Zugriffstyp: Schreibgeschützt

Qualifizierer: MaxLen (64), DisplayName ("Caption")

Kurze Beschreibung des Objekts.

Diese Eigenschaft wird von CIM_ManagedSystemElement geerbt.

CreationClassName

Datentyp: Zeichenfolge

Zugriffstyp: Schreibgeschützt

Qualifizierer: Cim_Key, MaxLen (256)

Name der ersten konkreten Klasse, die in der Vererbungskette angezeigt wird, die bei der Erstellung eines instance verwendet wird. Bei Verwendung mit den anderen Schlüsseleigenschaften der -Klasse ermöglicht diese Eigenschaft die eindeutige Identifizierung aller Instanzen dieser Klasse und ihrer Unterklassen.

Diese Eigenschaft wird von CIM_Thread geerbt.

CSCreationClassName

Datentyp: Zeichenfolge

Zugriffstyp: Schreibgeschützt

Qualifizierer: Weitergegeben ("CIM_Process. CSCreationClassName"), Cim_Key, MaxLen (256)

Erstellungsklassenname des Bereichscomputersystems.

Diese Eigenschaft wird von CIM_Thread geerbt.

CSName

Datentyp: Zeichenfolge

Zugriffstyp: Schreibgeschützt

Qualifizierer: Weitergegeben ("CIM_Process. CSName"), Cim_Key, MaxLen (256)

Name des Bereichscomputersystems.

Diese Eigenschaft wird von CIM_Thread geerbt.

Beschreibung

Datentyp: Zeichenfolge

Zugriffstyp: Schreibgeschützt

Qualifizierer: DisplayName ("Description")

Eine Beschreibung des Objekts.

Diese Eigenschaft wird von CIM_ManagedSystemElement geerbt.

ElapsedTime

Datentyp: uint64

Zugriffstyp: Schreibgeschützt

Qualifizierer: MappingStrings ("Win32API| Leistungsdatenstrukturen| PERF_OBJECT_TYPE| PerfTime"), Einheiten ("Millisekunden")

Gesamtausführungszeit in Millisekunden, die diesem Thread seit seiner Erstellung zugewiesen wurde.

Weitere Informationen zur Verwendung von uint64-Werten in Skripts finden Sie unter Skripterstellung in WMI.

ExecutionState

Datentyp: uint16

Zugriffstyp: Schreibgeschützt

Aktuelle Betriebsbedingung des Threads.

Diese Eigenschaft wird von CIM_Thread geerbt.

Unbekannt (0)

Sonstiges (1)

Bereit (2)

Wird ausgeführt (3)

Blockiert (4)

Gesperrt ( 5)

Angehalten bereit (6)

Handle

Datentyp: Zeichenfolge

Zugriffstyp: Schreibgeschützt

Qualifizierer: MaxLen (256), Überschreiben ("Handle"), MappingStrings ("Win32API| Toolhilfestrukturen| THREADENTRY32|th32ThreadID")

Handle mit einem Thread. Das Handle verfügt standardmäßig über Vollzugriffsrechte. Mit dem richtigen Sicherheitszugriff kann das Handle in jeder Funktion verwendet werden, die ein Threadhandle akzeptiert. Je nach dem beim Erstellen angegebenen Vererbungsflag kann dieses Handle von untergeordneten Prozessen geerbt werden.

InstallDate

Datentyp: datetime

Zugriffstyp: Schreibgeschützt

Qualifizierer: MappingStrings ("MIF. DMTF| ComponentID|001.5"), DisplayName ("Installationsdatum")

Objekt wurde installiert. Diese Eigenschaft benötigt keinen Wert, um anzugeben, dass das Objekt installiert ist.

Diese Eigenschaft wird von CIM_ManagedSystemElement geerbt.

KernelModeTime

Datentyp: uint64

Zugriffstyp: Schreibgeschützt

Qualifizierer: Überschreiben ("KernelModeTime"), MappingStrings ("Win32API| Leistungsdatenstrukturen| PERF_OBJECT_TYPE| PrivilegedTime "), Einheiten ("100 Nanosekunden")

Zeit im Kernelmodus in 100 Nanosekundeneinheiten. Wenn diese Informationen nicht verfügbar sind, sollte der Wert 0 (null) verwendet werden.

Weitere Informationen zur Verwendung von uint64-Werten in Skripts finden Sie unter Skripterstellung in WMI.

Name

Datentyp: Zeichenfolge

Zugriffstyp: Schreibgeschützt

Qualifizierer: DisplayName ("Name")

Bezeichnung, unter der das Objekt bekannt ist. Wenn sie unterklassiert wird, kann die Eigenschaft als Schlüsseleigenschaft überschrieben werden.

Diese Eigenschaft wird von CIM_ManagedSystemElement geerbt.

OSCreationClassName

Datentyp: Zeichenfolge

Zugriffstyp: Schreibgeschützt

Qualifizierer: Weitergegeben ("CIM_Process. OSCreationClassName"), Cim_Key, MaxLen (256)

Erstellungsklassenname des Bereichsbetriebssystems.

Diese Eigenschaft wird von CIM_Thread geerbt.

OSName

Datentyp: Zeichenfolge

Zugriffstyp: Schreibgeschützt

Qualifizierer: Propagiert ("CIM_Process. OSName"), Cim_Key, MaxLen (256)

Name des Bereichsbetriebssystems.

Diese Eigenschaft wird von CIM_Thread geerbt.

Priority

Datentyp: uint32

Zugriffstyp: Schreibgeschützt

Qualifizierer: Außerkraftsetzung ("Priorität"), MappingStrings ("Win32API| Toolhilfestrukturen| THREADENTRY32|tpDeltaPri")

Dynamische Priorität des Threads. Jeder Thread hat eine dynamische Priorität, die der Planer verwendet, um zu bestimmen, welcher Thread ausgeführt werden soll. Zunächst entspricht die dynamische Priorität eines Threads der Basispriorität. Das System kann die dynamische Priorität erhöhen und senken, um sicherzustellen, dass sie reaktionsfähig ist (wodurch sichergestellt wird, dass keine Threads für die Prozessorzeit verhungert sind). Das System erhöht die Priorität von Threads mit einer Basisprioritätsebene zwischen 16 und 31 nicht. Nur Threads mit einer Basispriorität zwischen 0 und 15 erhalten dynamische Prioritätserhöhungen. Höhere Zahlen deuten auf höhere Prioritäten hin.

PriorityBase

Datentyp: uint32

Zugriffstyp: Schreibgeschützt

Qualifizierer: MappingStrings ("Win32API| Leistungsdatenstrukturen | PERF_OBJECT_TYPE| PerfPriorityBase")

Aktuelle Basispriorität eines Threads. Das Betriebssystem kann die dynamische Priorität des Threads über die Basispriorität erhöhen, wenn der Thread Benutzereingaben verarbeitet, oder sie auf die Basispriorität herabgesetzt, wenn der Thread computegebunden wird. Die PriorityBase-Eigenschaft kann einen Wert zwischen 0 und 31 aufweisen.

ProcessCreationClassName

Datentyp: string

Zugriffstyp: Schreibgeschützt

Qualifizierer: Propagiert ("CIM_Process. CreationClassName"), Cim_Key, MaxLen (256)

Wert der CreationClassName-Eigenschaft des Bereichsprozesses.

Diese Eigenschaft wird von CIM_Thread geerbt.

ProcessHandle

Datentyp: string

Zugriffstyp: Schreibgeschützt

Qualifizierer: MaxLen (256), Override ("ProcessHandle"), Propagated ("CIM_Process. Handle), MappingStrings ("Win32API| Toolhilfestrukturen| THREADENTRY32|th32OwnerProcessID")

Prozess, der den Thread erstellt hat. Der Inhalt dieser Eigenschaft kann von API-Elementen (Application Programming Interface) von Windows verwendet werden.

StartAddress

Datentyp: uint32

Zugriffstyp: Schreibgeschützt

Qualifizierer: MappingStrings ("WIn32API| Thread-Objekt| LPTHREAD_START_ROUTINE|lpStartAddress")

Startadresse des Threads. Da jede Anwendung mit entsprechendem Zugriff auf den Thread den Kontext des Threads ändern kann, kann dieser Wert nur eine Näherung der Startadresse des Threads sein.

Status

Datentyp: string

Zugriffstyp: Schreibgeschützt

Qualifizierer: MaxLen (10), DisplayName ("Status")

Aktuelle status des Objekts. Es können verschiedene betriebsbezogene und nicht operative Status definiert werden. Zu den Betriebsstatus gehören: "OK", "Heruntergestuft" und "Pred Fail" (ein Element, z. B. eine SMART-fähige Festplatte, funktioniert möglicherweise ordnungsgemäß, sagt aber in naher Zukunft einen Fehler voraus). Zu den nicht betriebsbereiten Status gehören: "Fehler", "Wird gestartet", "Wird beendet" und "Dienst". Letzteres, "Dienst", kann beim Spiegel-Resilvering eines Datenträgers, beim Erneutladen einer Benutzerberechtigungsliste oder bei anderen administrativen Aufgaben gelten. Nicht alle derartigen Arbeiten sind online, aber das verwaltete Element ist weder "OK" noch in einem der anderen Zustände.

Diese Eigenschaft wird von CIM_ManagedSystemElement geerbt.

Die Werte sind:

OK ("OK")

Fehler ("Fehler")

Degraded ("Degraded")

Unbekannt ("Unbekannt")

Pred Fail ("Pred Fail")

Wird gestartet ("Wird gestartet")

Beenden ("Wird beendet")

Dienst ("Dienst")

Gestresst ("Gestresst")

NonRecover ("NonRecover")

Kein Kontakt ("Kein Kontakt")

Lost Comm ("Lost Comm")

Threadstate

Datentyp: uint32

Zugriffstyp: Schreibgeschützt

Qualifizierer: MappingStrings ("Win32API| Threadstatus")

Aktueller Ausführungsstatus für den Thread.

Initialisiert (0)

Initialisiert: Es wird vom Mikrokernel erkannt.

Bereit (1)

Bereit: Es ist für die Ausführung auf dem nächsten verfügbaren Prozessor vorbereitet.

Wird ausgeführt (2)

Wird ausgeführt: Es wird ausgeführt.

Standby ( 3)

Standby: Es wird ausgeführt, es kann jeweils nur ein Thread diesen Zustand aufweisen.

Beendet (4)

Beendet: Die Ausführung ist abgeschlossen.

Warten ( 5)

Warten – Es ist nicht bereit für den Prozessor, wenn er bereit ist, wird er neu geplant.

Übergang (6)

Übergang : Der Thread wartet auf andere Ressourcen als den Prozessor.

Unbekannt (7)

Unbekannt: Der Threadstatus ist unbekannt.

ThreadWaitReason

Datentyp: uint32

Zugriffstyp: Schreibgeschützt

Qualifizierer: MappingStrings ("Win32API| Threadwartegrund")

Grund, warum der Thread wartet. Dieser Wert ist nur gültig, wenn der ThreadState-Member auf Transition (6) festgelegt ist. Ereignispaare ermöglichen die Kommunikation mit geschützten Subsystemen.

Exekutive (0)

FreePage (1)

FreePage

PageIn (2)

PoolAllocation (3)

ExecutionDelay (4)

FreePage (5)

PageIn (6)

Exekutive (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)

Unbekannt (20)

UserModeTime

Datentyp: uint64

Zugriffstyp: Schreibgeschützt

Qualifizierer: Außerkraftsetzung ("UserModeTime"), MappingStrings ("Win32API| Leistungsdatenstrukturen | PERF_OBJECT_TYPE| UserTime "), Einheiten ("100 Nanosekunden")

Zeit im Benutzermodus in 100 Nanosekundeneinheiten. Wenn diese Informationen nicht verfügbar sind, sollte der Wert 0 (null) verwendet werden.

Weitere Informationen zur Verwendung von uint64-Werten in Skripts finden Sie unter Skripterstellung in WMI.

Bemerkungen

Die Win32_Thread-Klasse wird von CIM_Thread abgeleitet.

Übersicht

Für die routinemäßige tägliche Überwachung gibt es in der Regel wenig Grund, eine detaillierte Liste von Threads und den zugehörigen Eigenschaften zu haben. Computer erstellen und löschen Tausende von Threads im Laufe eines Tages, und nur wenige dieser Erstellungen oder Löschungen sind für jeden von Bedeutung, außer dem Entwickler, der die Software geschrieben hat.

Wenn Sie jedoch Probleme mit einer Anwendung beheben, können Sie nach der Verfolgung der einzelnen Threads für einen Prozess ermitteln, wann Threads erstellt werden und wann (oder ob) sie zerstört werden. Da Threads, die erstellt, aber nicht zerstört werden, Speicherverluste verursachen, kann die Nachverfolgung einzelner Threads hilfreiche Informationen für Supporttechniker sein. Ebenso kann das Identifizieren von Threadprioritäten dazu beitragen, Threads zu ermitteln, die durch Ausführung mit einer ungewöhnlich hohen Priorität CPU-Zyklen, die von anderen Threads und anderen Prozessen benötigt werden, vorzeitig entfernt werden.

Verwenden von Win32_Thread

Wie im vorherigen Syntaxblock impliziert, meldet die Win32_Thread-Klasse nicht den Namen des Prozesses, unter dem die einzelnen Threads ausgeführt werden. Stattdessen wird die ID des Prozesses gemeldet, unter dem der Thread ausgeführt wird. Um den Namen eines Prozesses und eine Liste aller zugehörigen Threads zurückzugeben, muss Ihr Skript Folgendes ausführen:

  1. Stellen Sie eine Verbindung mit der Win32_Process-Klasse her, und geben Sie die Liste der Prozesse und deren Prozess-IDs zurück.
  2. Speichern Sie diese Informationen vorübergehend in einem Array oder Dictionary-Objekt.
  3. Geben Sie für jede Prozess-ID die Liste der Threads für diesen Prozess zurück, und zeigen Sie dann den Prozessnamen und die Liste der Threads an.

Beispiele

Im folgenden VBScript-Beispiel werden die Threads überwacht, die auf einem Computer ausgeführt werden.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista
Unterstützte Mindestversion (Server)
WindowsServer 2008
Namespace
Root\CIMV2
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Siehe auch

CIM_Thread

Betriebssystemklassen