WMI (Windows Management Instrumentation) in C#
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,
- Create a WqlObjectQuery object with the query statement, SELECT * FROM Win32_CDROMDrive
WqlObjectQuery aWMIQuery = new WqlObjectQuery("SELECT * FROM WIN32_CDROMDrive"); - Create an object of ManagementObjectSearcher and assign the created query to this object
ManagementObjectSearcher aManagementObjectSearcher = new ManagementObjectSearcher(); aManagementObjectSearcher.Query = aWMIQuery;
- Run the query by calling the Get method in the ManagementObjectSearcher
aManagementObjectSearcher.Get();
- 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(); } - 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

