Implementing the High-Performance Interface

Because WMI loads a high-performance provider in-process to either WMI or a client application, you must design your high-performance provider as an in-process server. In addition, you must implement the high-performance provider methods in the IWbemHiPerfProvider and IWbemRefresher interfaces.

You should implement a high-performance provider as an in-process server. One feature you should be aware of when implementing the security of an in-process server is how the provider identifies its own location. When loaded in-process to WMI, WMI instantiates the provider using a CLSID. When loaded in process to a client application, the client application instantiates the provider with the ClientLoadableCLSID property. By giving different values to a CLSID and ClientLoadableCLSID, you allow the provider to determine if it is loaded in-process to WMI or to a client application. If located in a WMI process, the provider should do any necessary client impersonation by using ClientLoadableCLSID. If located in a client process, the provider inherits the access token of the thread it is called on. For more information about implementing an in-process server, see the COM section of MSDN.

As an in-process server, a high-performance provider uses a refresher object to keep data current for the remote client. The following table lists methods that you must implement for a high-performance provider.

Method Feature
IWbemHiPerfProvider::QueryInstances Queries
IWbemHiPerfProvider::GetObjects Object retrieval
IWbemHiPerfProvider::CreateRefresher Creates a refresher
IWbemHiPerfProvider::CreateRefreshableObject Creates a refreshable instance object
IWbemHiPerfProvider::CreateRefreshableEnum Creates a refreshable enumerator
IWbemHiPerfProvider::StopRefreshing Stops refreshing an enumerator or instance object
IWbemRefresher::Refresh Creates a refresher

 

Making an Instance Provider into a High-Performance Provider