Windows Management Interface (WMI)

Summary

     
    download Download this Visio 2002 file.

     

  1. To access management information about hardware devices, operating system, network services, and software applications,
  2. utilitieson this page such as
  3. VB Scripts called from Windows Scripting Hostsanother page on this site
  4. and C# and VB.NET apps
  5. make querieson this page in SQL-like WMI Query Language (WQL) syntax to the
  6. winmgmt.exe Windows Management serviceA website external to this site "core" component within Microsoft operating systems.
  7. This service" in turn queries various WMI Providers which actually obtain information from items under their jurisdiction.
  8. For Active Directory information, the ADSI Extension remote interface IWMIExtension is not available for Windows Server 2003, which instead use Active Directory Service Interfaces (ADSI)
  9. WMI queries can be made to the WMI core service from within a variety of langagues
  10. The names of objects queried are defined in a repositoryon this page which
  11. is updated by the mofcomp.exe SDK utility which compiles
  12. Managed Object Format (MOF) statements based on the Interface Definition Language (IDL).

    The Microsoft Windows Managment Service

      The "Windows Management Instrumentation" service winmgmt "Provides a common interface and object model to access management information about operating system, devices, applications, and services. If this service is stopped, most Windows-based software will not function properly. If this service is disabled, any services that depend on it will fail to start."

      The Windows Management service automatically starts when the first management application makes a call to connect.

      • On computers running Windows XP, the Windows Management service is implemented as a
        service process within SVCHOST.exe -k netsvcs.

        The additional security added by Windows XP SP2 requires a new Platform SDK

         

      • On computers running Windows NT/Windows 2000, the Windows Management service runs as a
        separate service process.

        The WMI core WMI functionality introduced in the Windows 2000 Professional SP2 operating system (that comes as part of Windows 2000 Pro, 98 SE, and NT4 SP6) can be downloaded as part of the .NET Framework for use on older systems.

         

      • On computers running Windows 98, the Windows Management service runs as a
        standard executable file (Winmgmt.exe) specified for invocation at start-up these Windows Registry entries.

         

      Windows 2000 and XP offer more information than previous OS versions. Windows 2000 includes WMI version 1.5 (1085.005), which is SMBIOS aware.

      L.J. Johnson notes that accessing Win32_QuickFixEngineering class on a pre-SP3 version of W2K causes the WinMgmt process to hang at 100% processor activity. Also, the WMI object seems to incorrectly parse some of the QEF information in the registry, and provides duplicate data for many of the QEFs. This bug is fixed in a post SP2 QEF, and in SP3 for W2K, so it is advisable to use his code to abort the WMI calls if the machine is running W2K SP3 or above,

      Private Function GetOS_
                          (ByVal xi_sWbemServices As SWbemServices) As Variant
                          Dim vntTmp                          As Variant
                          Dim vntRtn                          As Variant
                          ReDim vntRtn(1 To 2) As Variant
                          vntTmp = GetOsData(xi_sWbemServices)
                          If Left$(vntTmp(1, 13), 4) = "5.0." Then
                          If CLng(vntTmp(1, 25)) >= 3 Then
                          vntRtn(1) = True
                          vntRtn(2) = vbNullString
                          Else
                          vntRtn(1) = False
                          vntRtn(2) = "If you are running W2K, _
                          you must have at least SP3 to run this " & _
                          "method. You are running SP " & vntTmp(1, 25)
                          End If
                          Else
                          vntRtn(1) = True
                          vntRtn(2) = vbNullString
                          End If
                          GetOS = vntRtn
                          End Function
                          

      The "Windows Management Instrumentation Driver Extensions" service provides "systems management information to and from drivers."

       

    Go to Top of this page.
    Previous topic this page
    Next topic this page

    Set this at top of window. Query Namespaces

      The great thing about WMI is that it provides metadata about itself. Maclin provides this example of WSH VBScript code to recursively enumerate namespaces: The namespaces are:

      root/SECURITY
                          root/SecurityCenter
                          root/WMI
                          root/WMI/ms_409
                          root/CIMV2
                          root/CIMV2/ms_409
                          root/CIMV2/Applications
                          root/CIMV2/Applications/MicrosoftACT
                          root/CIMV2/Applications/MicrosoftIE
                          root/Microsoft
                          root/Microsoft/HomeNet
                          root/DEFAULT
                          root/DEFAULT/ms_409
                          root/directory
                          root/directory/LDAP
                          root/directory/LDAP/ms_409
                          root/subscription
                          root/subscription/ms_409
                          root/MSAPPS11
                          

      Example:

       wbemdump /Q root\cimv2 WQL "select Manufacturer from Win32_SystemEnclosure

      This returns a number (such as "6").

      Some applications provide an English translation, such as a datamap.ini that contains:

      [INV_List_ChassisTypes]
                          0 = Unknown
                          1 = Other
                          2 = Unknown
                          3 = Desktop
                          4 = Low Profile Desktop
                          5 = Pizza Box
                          6 = Mini Tower
                          7 = Tower
                          8 = Portable etc.
                          9 = Laptop
                          10 = Notebook
                          11 = Hand Held
                          12 = Docking Station
                          13 = All in One
                          14 = Sub Notebook
                          15 = Space-Saving
                          16 = Lunch Box
                          17 = Main System Chassis
                          18 = Expansion Chassis
                          19 = SubChassis
                          20 = Bus Expansion Chassis
                          21 = Peripheral Chassis
                          22 = Storage Chassis
                          23 = Rack Mount Chassis
                          24 = Sealed-Case PC
                          

      Every WMI class has a "Caption" property — a short description of the object-a one-line string.

      A WSH query to a remote computer can be defined using the winmgmts: object:

      Set objWMIService = GetObject("winmgmts://Computer_B\root\cimv2)

      The .NET sample application "Processes and Services Explorer" PsView.exe is installed by running the .NET nmake (from the VS.NET Bin folder) while in Program Files\Microsoft Visual Studio .NET 2003 folder SDK\v1.1\Samples\Technologies\Interop\Applications\WMI

      The installation depends on the WBEMSCRIPTING.dll which is also used by HealthMonitor, a free Windows Serviceanother page on this site app developed Vitorio Parvesi with VB.NET and WMI to check Windows system status (event viewer, disk free space, services status, performance, etc....)

      The C# source for the program is in subfolder Form

       

    Go to Top of this page.
    Previous topic this page
    Next topic this page

    Set this at top of window. Repository Schemas

      The root of the schema contains these namespaces :

      SECURITY
                          SecurityCenter
                          WMI
                          CIMV2
                          Microsoft
                          DEFAULT
                          directory
                          subscription
                          MSAPPS11

       

    Set this at top of window. WMI MMC CIM WBEM for Namespace control

      By default, the namespace is “root\cimv2” since WMI implements on Microsoft machines the Common Information Model (CIM) schema proposed by the Distributed Management Task Force (DMTF).

      On the Windows XP install CD, the CIMv2r5.mof file provides a strictly compliant schema to the DMTF's CIM version 2.5. Compiling this MOF (using a local account that is a member of the 'Administrators' group) places schema in the root\CIMv2r5 Namespace.

      The default namespace can be change manually using the MMC snap-inanother page on this site called WMI Control Properties :

      1. In the Control Panel, double-click on Administrative Tools.
      2. In the Administrative Tools window, double-click on Computer Management.
      3. In the Computer Management window, expand the Services and Applications tree and double-click on the WMI Control.
      4. Right-click on the WMI Control icon and select Properties.
      5. Click on the Advanced tab.

      This MMC provides the GUI to set security for each namespace.

      Changes here are stored in the Windows Registry Scripting/Default/Namespace key under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\
      "WBEM" is used because WMI is Microsoft's implementation of the implementation-neutral Web-Based Enterprise Management (WBEM) standard.

      The WMI scripting library is implemented in a single automation component named wbemdisp.dll in the %SystemRoot%\system32\wbem directory.

      There are twenty-four automation objects and thirteen enumerations in the Microsoft Windows XP and Windows Server 2003 version of wbemdisp.dll (nineteen in Windows 2000 and earlier).

    Set this at top of window. Programming API Support

      The WbemScripting library and API's are available for VBScript and JScript — the SWbemObjectSet collection of SWbemObject objects located on the SWbemObjectPath.

      The moniker winmgmts: is used to get WMI objects. For example:

      MsgBox (GetObject("WinMgmts:Win32_LogicalDisk='C:'").VolumeSerialNumber)

      The classes are defined WMI Win32 hardware classes

      Set this at top of window. ADSI API Support

      To obtain information from the Windows 2000 Active Directory, the IWMIExtension interface extends Microsoft's Active Directory Service Interface (ADSI) computer objects returned from the LDAP namespace. The Active Directory Provider supports the standard IWbemInit interface. It is initiated with the IWbemProviderInit interface.

      Microsoft provides a COM API library for C++ classes.

      C programs use the Wbemads.h header file and Wbemuuid.lib.
      VB programs use the Wbemadsi.tlb.

      Set this at top of window. Query Language

      The WMI Query Language (WQL) is similar to simple SELECT queries in SQL for the WMI ODBC Adapter. For example, to obtain capacity and free space for each logical drive:

        Select Space, FreeSpace, DeviceID From Win32_LogicalDisk

      Set this at top of window. WMI Utilities

      Download Microsoft WMITools. These use ActiveX, so must be run using Internet Explorer (not Mozilla/Netscape browsers) and active must be allowed.

      • WMI Object Browser: view objects, edit property values and qualifiers, and run methods from instance of Win32_ComputerSystem. screen captured

         

      • WMI CIM Studio: view and edit classes, properties, qualifiers, and instances in a CIM repository; run selected methods; generate and compile MOF files.

         

      • WMI Event Registration Tool: creates, permanent event consumers, creates or views instances of event consumers, filters, bindings, and timer system classes.

         

      • WMI Event Viewer: displays the occurrence of WMI events you have configured in the WMI Event Registration.

      wmic command-line utility,

      tool wbemdump.exe displays WMI classes, runs methods, and executes queries against classes in a namespace.

      tool WMI browser from Microsoft's WMI SDK uses Microsoft's Distributed COM (DCOM) to obtain information about accessing remote machines, especially machines with Windows XP SP2

      tool $99 Admin Script Editor (ASE) features a WMI Wizard

       

     

      Go to Top of this page.
    Previous topic this page
    Next topic this page

    Set this at top of window. VBScript Examples

          'Get the set
                              Set objProcSet = objService.InstancesOf(strWBEMClass)
                              If blnErrorOccurred("Could not obtain " & _
                              strWBEMClass & " instance.") Then
                              Exit Sub
                              End If
                              If objProcSet.Count = 0 Then
                              Call WriteLine("No processor information is available.", objOutputFile)
                              Exit Sub
                              End If
                              Call WriteLine("Processor information for Machine " _
                              & strServer, objOutputFile)
                              Call WriteLine("", objOutputFile)
                              For Each objProc In objProcSet
                              Call WriteLine("Name                = " & _
                              objProc.Name, objOutputFile)
                              Call WriteLine("Current Voltage     = " & _
                              objProc.CurrentVoltage, objOutputFile)
                              Call WriteLine("Device ID           = " & _
                              objProc.DeviceID, objOutputFile)
                              Call WriteLine("Status              = " & _
                              objProc.CpuStatus, objOutputFile)
                              Call WriteLine("Data Width          = " & _
                              objProc.DataWidth, objOutputFile)
                              Call WriteLine("Current Clock Speed = " & _
                              objProc.CurrentClockSpeed, objOutputFile)
                              Call WriteLine("L2 Cache Size       = " & _
                              objProc.L2CacheSize, objOutputFile)
                              Call WriteLine("Level               = " & _
                              objProc.Level, objOutputFile)
                              Call WriteLine("External Clock      = " & _
                              objProc.ExtClock, objOutputFile)
                              Call WriteLine("", objOutputFile)
                              Next
                              

      ActiveXperts Network Monitor provides examples of WMI in VB.

      To display properties of objProc objects in WBEMClass "Win32_Processor", run this from the Resource Kit:

      Name                = Intel Celeron processor
                                  Current Voltage     = 33
                                  Device ID           = CPU0
                                  cpu Status          = 1
                                  Data Width          = 32
                                  Current Clock Speed = 499
                                  L2 Cache Size       = 128
                                  Level               = 6
                                  Ext(ernal) Clock    = 83
                                  

      To display properties of objMBOI objects in WBEMClass "Win32_MotherboardDevice", run this from the Resource Kit:

        Name = Motherboard
                                            Device ID = Motherboard
                                            Primary Bus Type = PCI
                                            Secondary Bus Type = ISA
                                            

      To display properties of objCache objects in WBEMClass "Win32_CacheMemory", the Size and Error Correction type used by your Cache, run this from the Resource Kit:

        Name               = Cache Memory
                                                Error Correct Type = Unknown
                                                Location           = Internal
                                                Max Cache Size     = 32
                                                Name               = Cache Memory
                                                Error Correct Type = Unknown
                                                Location           = External
                                                Max Cache Size     = 2048
                                                

       

    Go to Top of this page.
    Previous topic this page
    Next topic this page

    Set this at top of window. MS dot NET Implementation

      The .NET Framework WMI implementation defined its System.Management namespace to manage applications with these first level operations:

      • ManagementQuery used as the basis for all query classes.
      • ManagementObjectSearcher to retrieve a collection of ManagementObject or
        ManagementClass objects based on a specified query or enumeration.
      • ManagementEventWatcher to subscribe to event notifications from WMI.

    • To obtain a list of namespaces:

        Using C# .NET code, list all WMI instances of __namespace WMI class

        ManagementClass nsClass = new
                                                ManagementClass(
                                                new ManagementScope("root"),
                                                new ManagementPath("__namespace"),
                                                null);
                                                foreach(ManagementObject ns in nsClass.GetInstances()) {
                                                Console.WriteLine( ns["Name"].ToString() );
                                                }

        Using .VBS script:

        Option Explicit
                                                Dim strNS
                                                Dim strComputerName
                                                strNS = "root"
                                                If WScript.Arguments.Count > 0 Then
                                                strComputerName = WScript.Arguments(0)
                                                Else
                                                strComputerName = "."
                                                End If
                                                GetNamespaces(strNS)
                                                Sub GetNamespaces(strNameSpace)
                                                Dim colNameSpaces
                                                Dim objNS
                                                Set colNameSpaces = GetObject( _
                                                "winmgmts:{impersonationLevel=impersonate}//" & _
                                                strComputerName & "/" & _
                                                strNameSpace).InstancesOf ("__NAMESPACE")
                                                For Each objNS In colNameSpaces
                                                GetNamespaces(strNameSpace & "/" & objNS.Name)
                                                Next
                                                End Sub
                                                

       

     

      Go to Top of this page.
    Previous topic this page
    Next topic this page

    Set this at top of window. MS dot NET WMI Queries

      In my WMIW32Queries.cs C# .NET console .exe program:

      • To obtain the Win32_OperatingSystem collection of objects webpage article (as in John O'Donnell's program to query information provided by the WinMgmt.exe service)

        1. Instantiate a ManagementObjectSearcher query object with a query string formatted in SQL-like syntax:

          ManagementObjectSearcher query1 = new
                                                      ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem") ; 

           

        2. Populate a ManagementObjectCollection object with an overrided Get method:

           ManagementObjectCollection queryCollection1 = query1.Get(); 

           

        3. Iterate through each ManagementObject in the collection:

           foreach( ManagementObject mo in queryCollection1 ) {
                                                      Console.WriteLine("Name : " + mo["name"].ToString());

         

      • To obtain Win32_Environment variables:

        1. Instantiate a SelectQuery object for a user:

          SelectQuery query2 = new
                                                      SelectQuery("Win32_Environment", "UserName=\"\"");

           

        2. Instantiate a ManagementObjectSearcher query object:

          ManagementObjectSearcher searcher = new
                                                      ManagementObjectSearcher(query2);

           

        3. Iterate through each ManagementBaseObject :

          foreach (ManagementBaseObject envVar in searcher.Get()) {
                                                      Console.WriteLine("{0} = {1}",
                                                      envVar["Name"],
                                                      envVar["VariableValue"]);

         

      • To obtain a list of Windows services from the Win32_Service schema using multiple threadsanother page on this site (as explained in Microsoft's Windows Management Instrumentation (WMI) Tutorial demonstrating how instance enumeration can be synchronous or asynchronous)

        1. Instantiate a SelectQuery object while instantiating a ManagementObjectSearcher query object:

          ManagementObjectSearcher searcher = new
                                                      ManagementObjectSearcher(new SelectQuery("Win32_Service"));

           

        2. Instantiate an OperationObserver object:

          ManagementOperationObserver results = new
                                                      ManagementOperationObserver();

           

        3. Instantiate a custom ObjectHandler for results and completion:

          ObjectHandler objectHandler = new
                                                      ObjectHandler();

           

        4. Attach the ObjectHandler to events for results and completion:

          results.ObjectReady += new
                                                      ObjectReadyEventHandler(objectHandler.NewObject);
                                                      results.Completed += new
                                                      CompletedEventHandler(objectHandler.Done);

           

        5. Call the asynchronous overload of ManagementOperationObserver Get() to start the enumeration:

          searcher.Get(results);

           

        6. Sleep while results complete asynchronously:

          while (!objectHandler.IsCompleted) {
                                                      System.Threading.Thread.Sleep (1000);
                                                      }
                                                      objectHandler.Reset();

       

    Go to Top of this page.
    Previous topic this page
    Next topic this page

    Set this at top of window. AutoDiscovery/AutoPurge ( ADAP) mechanism

      Windows 2000 introduced the ability for applications to make its counters available among the Performance Object list within the Perfmon System Monitoranother page on this site

      This is done through the Reverse Adapter service wmiapsrv.exe through a custom high-performance WMI provider that creates WMI performance classes that:

      • inherits from Win32_PerfRawData in root\cimv2 or \root\wmi namespaces.
      • provides class qualifiers HiPerf, Provider, and Dynamic .
      • These qualifiers are not of the class: Abstract, GenericPerfCtr, nor Cooked.
      • The property provides qualifiers CounterType, DefaultScale, and PerfDetail .

      AutoDiscovery/AutoPurge ( ADAP) mechanism of WMI. This switch is only available on Windows 2000 and later.

      tool wmiadap.exe runs the AutoDiscovery/Auto Purge (ADAP) process that parse or clear performance libraries.

       

    Go to Top of this page.
    Previous topic this page
    Next topic this page

    Set this at top of window. Directory-Enabled Networking (DEN)

      Directory-Enabled Networking (DEN) was proposed by Microsoft and Cisco Systems in 1998 to enhance interoperability between Microsoft's Active Directory and Cisco's Cisco Directory Services (CDS), integrated by the Cisco Networking Services for Active Directory (CNS/AD) product. DEN is a specification of generalized object-oriented data structures organized into a comprehensive single-inheritance schema for a common namespace across the entire network (DHCP, DNS, RADIUS, Kerberos, Netscape, Novell, ERP, etc.). The schema is extended from a superclass to a subclass.

      DEN v3.0 incorporated three existing directory standards:

      Each DEN class describes a set of objects that share the same attributes, operations, methods, relationships, and semantics. A DEN object is a network element that exists within a class, with a well-defined boundary: an identity that encapsulates state and behavior. In other words, DEN is a very detailed specification that describes anything a human or machine using a network is likely to need to know. Each such element description is a class.

      A class is a prototype of a unique data structure designed to serve as a template for a particular entity.

      The data structure arranges the class's attributes (also called variables) in a record that best represents the relationships of the attributes. A class inherits some of its properties from a parent class higher up the food chain, and classes below it derive some of their properties from the higher class-thus the terms superclass and subclass.

      The four types of DEN classes-abstract, structural, container, and auxiliary-define what the classes can do.

      • Derived From - The superclass for this class.
      • Possible Superiors - A list of classes that may serve as a parent of instances of this class.
      • Auxiliary Class - A class used to bind one class of objects to another-for example, to bind hostConditionAuxClass and routeConditionAuxClass, together, to the policyCondition structural class.
      • Must Contain - List of attributes this class must contain.
      • May Contain - List of attributes this class may contain.
      • Relationships - List of associations and/or aggregations defined for this class.

    from : http://www.wilsonmar.com/1wmiwbem.htm

    posted on 2008-07-08 12:03  Mat  阅读(2767)  评论(0编辑  收藏  举报

    导航