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
-
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:
- Stellen Sie eine Verbindung mit der Win32_Process-Klasse her, und geben Sie die Liste der Prozesse und deren Prozess-IDs zurück.
- Speichern Sie diese Informationen vorübergehend in einem Array oder Dictionary-Objekt.
- 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 |
|
DLL |
|
Siehe auch