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 Component Object Model (COM) documentation.
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 |
Related topics