Codelog

foreach(Snippet aSnippet in CodeLog){ aSnippet.GetSolution(); }

WMI (Windows Management Instrumentation) in C#

without comments

In my previous post, I had written about ManagementEventWatcher with some WMI querries. In this post we will try to figure out what this WMI is.

WMI stands for Windows Management Instrumentation. Its a set of functionalities provided by the OS (Windows) for the applications to control / manage the administrative tasks (check this out for a formal definition).

For example, if you wanna retrieve information about the CDROM drive on a machine, you can write some simple queries in c# and get that job done.

Using WMI in C#

Its fairly simple  in C# to use WMI infrastructure services. C# comes with a class called, ManagementObjectSearcher with which we can query for any information. Lets take the fore mentioned example, the CDROM example. To get information about the CDROM,

  1. Create a WqlObjectQuery object with the query statement, SELECT * FROM Win32_CDROMDrive

    WqlObjectQuery aWMIQuery = new WqlObjectQuery("SELECT * FROM WIN32_CDROMDrive");
  2. Create an object of ManagementObjectSearcher and assign the created query to this object
    ManagementObjectSearcher aManagementObjectSearcher = new ManagementObjectSearcher();
    aManagementObjectSearcher.Query = aWMIQuery;
  3. Run the query by calling the Get method in the ManagementObjectSearcher
    aManagementObjectSearcher.Get();
  4. The Get() method returns a ManagementObjectCollection. Iterate thru’ it to get the reults of the query. Each ManagementObject’s Properties field (ManagementObject.Properties) will contain a PropertiesDataCollection. Iterate thru’ this for additional results on the query
    foreach (ManagementObject aObject in aObjectSearcher.Get())
    {
      Console.WriteLine(aObject.Properties.ToString());
      foreach (PropertyData aProperty in aObject.Properties)
      {
        Console.Write("\t");
        Console.WriteLine(aProperty.Name + "----->" + aProperty.Value);
      }
      Console.WriteLine();
    }
  5. Change the query according to your need. You can query USB Drive information, Hard Disks, Processes and so on. Check out the MSDN for the list of WMI classes

Written by sudarsanyes

June 25th, 2009 at 2:26 pm

Leave a Reply