COM API for WMI
You can use the WMI Component Object Model (COM) API to write management client applications or create a new WMI provider. The COM API reference provides information for advanced system administrators, as well as developers who are writing client and provider applications.
WMI only supports C++ development using Microsoft Visual C++ version 6.0 and later development systems. However, you can also use other compilers such as those from Borland and Watcom.
Each of the different WMI objects inherit from an interface ultimately inherited from the IUnknown interface. COM dictates how object implementers, or interfaces, handle tasks such as memory management, parameter management, and multithreading. By conforming to COM, the COM API for WMI ensures that it supports the functionality provided by the interfaces of each WMI object.
WMI is accessed through the following WMI-specific COM interfaces.
|IEnumWbemClassObject||Enumerator that works with objects of type IWbemClassObject. It is similar to standard COM enumerators, such as IEnumVariant.|
|IMofCompiler||Implemented by Mofd.dll, this interface provides a COM interface that is used by the MOF compiler and any other applications that compile MOF files.|
|IUnsecuredApartment||Used to simplify the process of making asynchronous calls from a client process.|
|IWbemBackupRestore||Backs up and restores the contents of the WMI repository.|
|IWbemCallResult||Used for semisynchronous calls of the IWbemServices interface. When making such calls, the called IWbemServices method returns immediately, along with an IWbemCallResult object.|
|IWbemCausalityAnalysis||Tracks child requests that are generated from a parent request.|
|IWbemClassObject||Contains and manipulates both class definitions and class object instances. Developers need not implement this interface; WMI provides its implementation.|
|IWbemConfigureRefresher||Used by client code to add or remove enumerators, objects, and nested refreshers into a refresher.|
|IWbemContext||Optionally used to communicate additional context information to providers when submitting IWbemServices calls to Windows Management.|
|IWbemDecoupledBasicEventProvider||Registers decoupled providers with WMI.|
|IWbemDecoupledRegistrar||Associates decoupled providers with WMI. This interface allows a process-hosted provider to define the interoperability lifetime of the interface and coexist with other providers.|
|IWbemEventConsumerProvider||Provides the primary interface for an event consumer provider. Through this interface and the FindConsumer method, an event consumer provider can indicate which event consumers should receive a given event.|
|IWbemEventProvider||Used to initiate communication with an event provider.|
|IWbemEventProviderQuerySink||Optionally implemented by event providers who want to know what kinds of event query filters are currently active to optimize performance.|
|IWbemEventProviderSecurity||Optionally implemented by event providers who want to restrict consumer access to their event.|
|IWbemEventSink||Initiates communication with an event provider using a restricted set of queries. This interface extends IWbemObjectSink, providing new methods dealing with security and performance.|
|IWbemHiPerfProvider||Enables providers to supply refreshable objects and enumerators.|
|IWbemHiPerfEnum||Used in refresher operations to provide rapid access to enumerations of instance objects.|
|IWbemLocator||Obtains the initial namespace pointer to the IWbemServices interface for WMI on a specific host computer.|
|IWbemObjectAccess||Provides access to the methods and properties of an object. An IWbemObjectAccess object is a container for an instance updated by a refresher.|
|IWbemObjectSink||Used to receive both the results of IWbemServices and certain types of event notifications.|
|IWbemObjectTextSrc||Used to translate IWbemClassObject instances to and from differing text formats.|
|IWbemPropertyProvider||Supports retrieving and updating individual properties in an instance of a WMI class.|
|IWbemProviderIdentity||Implemented by an event provider if the provider registers itself using more than one Name (multiple instances of __Win32Provider) with the same CLSID value. The class provides a mechanism for distinguishing which named provider should be used.|
|IWbemProviderInit||Used to initialize providers.|
|IWbemProviderInitSink||Implemented by WMI and called by providers to report initialization status.|
|IWbemQualifierSet||Acts as a container for the entire set of named qualifiers for a single property or entire object (a class or instance).|
|IWbemQuery||Provides an entry point through which a WMI Query Language (WQL) query can be parsed.|
|IWbemRefresher||Provides an entry point through which refreshable objects such as enumerators or refresher objects, can be refreshed.|
|IWbemServices||Used by clients and providers to access WMI services. The interface is implemented only by WMI and is the primary WMI interface.|
|IWbemStatusCodeText||Extracts text string descriptions of error codes or the name of the subsystem where the error occurred.|
|IWbemUnboundObjectSink||Implemented by all logical event consumers. It is a simple sink interface that accepts delivery of event objects.|
Many of the WMI COM functions return numeric error codes that are documented as named constants. These constants are defined in Wbemcli.h in the PSDK WMI\Include folder. For more information, see WMI Return Codes.
For more information about the following topics for COM programming, see Component Development:
- Interfaces and object design.
- Implementing IUnknown.
- Memory management
- Handling reference counting.