How to

enumerate windows threads

Published: 12. February 2012 | Updated: 12. February 2012
License: Microsoft Public License (MS-PL)
Categories: Windows
Tags: C# Threading Win32 Windows WMI
Was this snippet helpful for you? YESYES / NONO

Import namespaces

using System;
using System.Collections.Generic;
using System.Management; // requires adding System.Management reference to project

Code

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Thread");
ManagementObjectCollection collection = searcher.Get();

var items = new List<Win32_Thread>();
foreach (ManagementObject obj in collection)
{
    var item = new Win32_Thread();
    item.Caption = (string)obj["Caption"];
    item.CreationClassName = (string)obj["CreationClassName"];
    item.CSCreationClassName = (string)obj["CSCreationClassName"];
    item.CSName = (string)obj["CSName"];
    item.Description = (string)obj["Description"];
    item.ElapsedTime = (ulong?)obj["ElapsedTime"];
    item.ExecutionState = (ushort?)obj["ExecutionState"];
    item.Handle = (string)obj["Handle"];
    item.InstallDate = (DateTime?)obj["InstallDate"];
    item.KernelModeTime = (ulong?)obj["KernelModeTime"];
    item.Name = (string)obj["Name"];
    item.OSCreationClassName = (string)obj["OSCreationClassName"];
    item.OSName = (string)obj["OSName"];
    item.Priority = (uint?)obj["Priority"];
    item.PriorityBase = (uint?)obj["PriorityBase"];
    item.ProcessCreationClassName = (string)obj["ProcessCreationClassName"];
    item.ProcessHandle = (string)obj["ProcessHandle"];
    item.StartAddress = (uint?)obj["StartAddress"];
    item.Status = (string)obj["Status"];
    item.ThreadState = (uint?)obj["ThreadState"];
    item.ThreadWaitReason = (uint?)obj["ThreadWaitReason"];
    item.UserModeTime = (ulong?)obj["UserModeTime"];

    items.Add(item);
}

Class

public class Win32_Thread
{
    public string Caption;
    public string CreationClassName;
    public string CSCreationClassName;
    public string CSName;
    public string Description;
    public ulong? ElapsedTime;
    public ushort? ExecutionState;
    public string Handle;
    public DateTime? InstallDate;
    public ulong? KernelModeTime;
    public string Name;
    public string OSCreationClassName;
    public string OSName;
    public uint? Priority;
    public uint? PriorityBase;
    public string ProcessCreationClassName;
    public string ProcessHandle;
    public uint? StartAddress;
    public string Status;
    public uint? ThreadState;
    public uint? ThreadWaitReason;
    public ulong? UserModeTime;
}
Send us feedback about this snippet »



Related Snippets: