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.
|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|