Win32 _ Thread-Klasse
Die Win32-Thread-WMI-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 nutzen die Prozessumgebung gemeinsam, daher verwenden mehrere Threads unter demselben Prozess weniger Arbeitsspeicher als die gleiche Anzahl von Prozessen.
Die folgende Syntax wurde aus MOF-Code (Managed Object Format, verwaltetes Objektformat) vereinfacht und enthält alle geerbten Eigenschaften. Eigenschaften und Methoden werden in alphabetischer Reihenfolge und nicht in MOF-Reihenfolge sortiert.
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 diese Typen von Membern:
Eigenschaften
Die Win32 _ Thread-Klasse verfügt über diese Eigenschaften.
-
Caption
-
-
Datentyp: String
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: MaxLen (64), DisplayName ("Caption")
Kurze Beschreibung des Objekts.
Diese Eigenschaft wird von CIM _ ManagedSystemElementgeerbt.
-
-
CreationClassName
-
-
Datentyp: String
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: _ Cim-Schlüssel, MaxLen (256)
Name der ersten konkreten Klasse, die in der Vererbungskette angezeigt wird, die bei der Erstellung einer Instanz 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 vom _ CIM-Threadgeerbt.
-
-
CSCreationClassName
-
-
Datentyp: String
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: Weitergegeben ("_ CIM-Prozess.CSCreationClassName"), _ Cim-Schlüssel, MaxLen (256)
Name der Erstellungsklasse des Bereichscomputersystems.
Diese Eigenschaft wird vom _ CIM-Threadgeerbt.
-
-
CSName
-
-
Datentyp: String
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: Weitergegeben ("_ CIM-Prozess.CSName"), _ Cim-Schlüssel, MaxLen (256)
Name des Bereichscomputersystems.
Diese Eigenschaft wird vom _ CIM-Threadgeerbt.
-
-
Beschreibung
-
-
Datentyp: String
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: DisplayName ("Beschreibung")
Eine Beschreibung des Objekts.
Diese Eigenschaft wird von CIM _ ManagedSystemElementgeerbt.
-
-
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 zur Verfügung gestellt 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 vom _ CIM-Threadgeerbt.
-
-
Unbekannt (0)
-
Andere (1)
-
Bereit (2)
-
Wird ausgeführt (3)
-
Blockiert (4)
-
Angehalten blockiert (5)
-
Suspended Ready (6)
Handle
-
Datentyp: String
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: MaxLen (256), Außerkraftsetzung ("Handle"), MappingStrings ("Win32API | Tool Help Structures | THREADENTRY32 | th32ThreadID")
Handle für einen 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. Abhängig vom Vererbungsflag, das beim Erstellen angegeben wird, kann dieses Handle von untergeordneten Prozessen geerbt werden.
InstallDate
-
Datentyp: datetime
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: MappingStrings ("MIF. DMTF | ComponentID | 001.5"), DisplayName ("Installationsdatum")
Das Objekt wurde installiert. Diese Eigenschaft benötigt keinen Wert, um anzugeben, dass das Objekt installiert ist.
Diese Eigenschaft wird von CIM _ ManagedSystemElementgeerbt.
KernelModeTime
-
Datentyp: uint64
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: Überschreiben ("KernelModeTime"), MappingStrings ("Win32API-Leistungsdatenstrukturen | | PERF _ OBJECT _ TYPE | PrivilegedTime"), Einheiten ("100 Nanosekunden")
Zeit im Kernelmodus in Einheiten von 100 Nanosekunden. 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: String
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: DisplayName ("Name")
Bezeichnung, mit der das Objekt bekannt ist. Bei einer Unterklasse kann die Eigenschaft als Schlüsseleigenschaft überschrieben werden.
Diese Eigenschaft wird von CIM _ ManagedSystemElementgeerbt.
OSCreationClassName
-
Datentyp: String
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: Weitergegeben ("_ CIM-Prozess.OSCreationClassName"), _ Cim-Schlüssel, MaxLen (256)
Name der Erstellungsklasse des Bereichsbetriebssystems.
Diese Eigenschaft wird vom _ CIM-Threadgeerbt.
OSName
-
Datentyp: String
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: Propagated ("CIM _ Process.OSName"), Cim _ Key, MaxLen (256)
Name des Bereichsbetriebssystems.
Diese Eigenschaft wird vom _ CIM-Thread geerbt.
Priority
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: Override ("Priority"), MappingStrings ("Win32API | Tool Help Structures | THREADENTRY32 | tpDeltaPri")
Dynamische Priorität des Threads. Jeder Thread hat eine dynamische Priorität, mit der der Scheduler bestimmt, welcher Thread ausgeführt werden soll. Anfänglich ist die dynamische Priorität eines Threads mit der Basispriorität identisch. Das System kann die dynamische Priorität erhöhen und senken, um sicherzustellen, dass es reaktionsfähig ist (garantiert, dass keine Threads für die Prozessorzeit verhungern). Das System erhöht nicht die Priorität von Threads mit einer Basisprioritätsstufe zwischen 16 und 31. Nur Threads mit einer Basispriorität zwischen 0 und 15 erhalten dynamische Prioritätssteigerungen. Höhere Zahlen weisen auf höhere Prioritäten hin.
PriorityBase
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: MappingStrings ("Win32API | Performance Data Structures | 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 verwendet, oder es kann die Priorität auf die Basispriorität senken, wenn der Thread computegebunden wird. Die PriorityBase-Eigenschaft kann einen Wert zwischen 0 und 31 haben.
ProcessCreationClassName
-
Datentyp: Zeichenfolge
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: Propagated ("CIM _ Process.CreationClassName"), Cim _ Key, MaxLen (256)
Der Wert der CreationClassName-Eigenschaft des Bereichsprozesses.
Diese Eigenschaft wird vom _ CIM-Thread geerbt.
ProcessHandle
-
Datentyp: Zeichenfolge
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: MaxLen (256), Override ("ProcessHandle"), Propagated ("CIM _ Process.Handle"), MappingStrings ("Win32API | Tool Help Structures | THREADENTRY32 | th32OwnerProcessID")
Prozess, der den Thread erstellt hat. Der Inhalt dieser Eigenschaft kann von Windows API-Elementen (Application Programming Interface) verwendet werden.
StartAddress
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: MappingStrings ("WIn32API | Thread Object | 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: Zeichenfolge
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: MaxLen (10), DisplayName ("Status")
Aktueller Status des Objekts. Es können verschiedene betriebsbereite und nicht betriebsbereite Status definiert werden. Folgende Betriebsstatus sind möglich: "OK", "Heruntergestuft" und "Fehler vor dem Ausfall" (ein Element, z. B. ein SMART-fähiges Festplattenlaufwerk, funktioniert möglicherweise ordnungsgemäß, aber es wird in naher Zukunft ein Fehler vorhergesagt). Nicht operative Status sind: "Error", "Starting", "Stopping" und "Service". Letzteres, "Dienst", kann während der Spiegelung eines Datenträgers, beim erneuten Laden einer Benutzerberechtigungsliste oder bei anderen administrativen Aufgaben angewendet werden. 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")
Heruntergestuft ("Heruntergestuft")
Unbekannt ("Unbekannt")
Pred Fail ("Pred Fail")
Wird gestartet ("Wird gestartet")
Wird beendet ("Wird beendet")
Dienst ("Dienst")
Striche ("Strich")
NonRecover ("NonRecover")
Kein Kontakt ("Kein Kontakt")
Lost Comm ("Lost Comm")
Threadstate
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: MappingStrings ("Win32API | Thread State")
Aktueller Ausführungszustand für den Thread.
Initialisiert (0)
Initialisiert: Sie wird vom Mikrokernel erkannt.
Bereit (1)
Bereit: Sie ist für die Ausführung auf dem nächsten verfügbaren Prozessor vorbereitet.
Wird ausgeführt (2)
Wird ausgeführt– Wird ausgeführt.
Standby (3)
Standby : Es wird gerade ausgeführt. Es kann immer nur ein Thread gleichzeitig in diesem Zustand sein.
Beendet (4)
Beendet: Die Ausführung ist abgeschlossen.
Wartend (5)
Warten: Er ist nicht bereit für den Prozessor. Wenn er bereit ist, wird er neu einplanet.
Übergang (6)
Übergang: Der Thread wartet auf andere Ressourcen als den Prozessor.
Unbekannt (7)
Unbekannt: Der Threadzustand ist unbekannt.
ThreadWaitReason
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: MappingStrings ("Win32API | Thread Wait Reason")
Grund, warum der Thread wartet. Dieser Wert ist nur gültig, wenn das ThreadState-Member auf Transition (6) festgelegt ist. Ereignispaare ermöglichen die Kommunikation mit geschützten Subsystemen.
Executive (0)
FreePage (1)
FreePage
PageIn (2)
PoolAllocation (3)
ExecutionDelay (4)
FreePage (5)
PageIn (6)
Executive (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: Überschreiben ("UserModeTime"), MappingStrings ("Win32API-Leistungsdatenstrukturen | | PERF _ OBJECT _ TYPE | UserTime"), Einheiten ("100 Nanosekunden")
Zeit im Benutzermodus in Einheiten von 100 Nanosekunden. 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.
Hinweise
Die _ Win32-Threadklasse wird von _ CIM-Threadabgeleitet.
Übersicht
Für die routinemäßige tägliche Überwachung gibt es in der Regel wenig Grund, eine detaillierte Liste der Threads und der zugehörigen Eigenschaften zu haben. Computer erstellen und löschen im Laufe eines Tages Tausende von Threads, und einige dieser Erstellungen oder Löschungen sind für jeden sinnvoll, außer für den Entwickler, der die Software geschrieben hat.
Wenn Sie jedoch Probleme mit einer Anwendung beheben, können Sie anhand der Nachverfolgung der einzelnen Threads für einen Prozess ermitteln, wann Threads erstellt und wann (oder ob) sie zerstört werden. Da Threads, die erstellt, aber nicht zerstört werden, zu Speicherverlusten führen, kann die Nachverfolgung einzelner Threads hilfreiche Informationen für Supporttechniker sein. Ebenso kann die Identifizierung von Threadprioritäten dabei helfen, Threads zu ermitteln, die durch ausführen mit einer ungewöhnlich hohen Priorität CPU-Zyklen vorentäuschen, die von anderen Threads und anderen Prozessen benötigt werden.
Verwenden des _ Win32-Threads
Wie im vorherigen Syntaxblock impliziert, meldet die _ Win32-Threadklasse nicht den Namen des Prozesses, unter dem jeder Thread ausgeführt wird. Stattdessen wird die ID des Prozesses, unter dem der Thread ausgeführt wird, angezeigt. Um den Namen eines Prozesses und eine Liste aller threads zurückzugeben, muss Ihr Skript Folgendes ausführen:
- Verbinden zur Win32 _ Process-Klasse und geben die Liste der Prozesse und deren Prozess-IDs zurück.
- Speichern Sie diese Informationen vorübergehend in einem Array- oder Wörterbuchobjekt.
- 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) |
Windows Server 2008 |
| Namespace |
Stamm \ CIMV2 |
| MOF |
|
| DLL |
|