实现类提供程序的主接口
可通过两种方式实现类提供程序:作为推送提供程序实现接口,或作为拉取提供程序实现接口。
本主题包括以下部分:
实现推送类提供程序的主接口
虽然所有提供程序都实现 IWbemProviderInit 进行初始化,并且至少有一个其他接口作为其主接口,但推送提供程序仅实现 IWbemProviderInit。
确保实现可执行以下任务:
- 检索相应的类数据。
- 将数据置于 WMI 存储库中。
- 删除过时的数据。
完成初始化过程后,WMI 处理属于推送提供程序的类的所有应用程序请求,而不会进行进一步的提供程序交互。 之后,推送提供程序实际上充当 WMI 的客户端,而不是提供程序。 有关实现 IWbemProviderInit 的详细信息,请参阅初始化提供程序。
注意
调用 WMI 以在推送提供程序中创建、更新或移除数据时,请将 lFlags 参数设置为在对 IWbemServices 方法的所有调用中包含 WBEM_FLAG_OWNER_UPDATE 标志。
实现拉取类提供程序的主接口
类拉取提供程序应实现 IWbemServices 作为主接口。 IWbemServices 接口支持数据检索、数据更新、数据删除、枚举和查询处理。 但是,由于应用程序和提供程序也使用 IWbemServices 来请求 WMI 的服务,因此 IWbemServices 包含许多与类提供程序无关的方法。 实现必须分别通过 GetObjectAsync 和 CreateClassEnumAsync 方法支持类检索和枚举。 下表列出了可为类提供程序实现的其他异步 IWbemServices 方法。
方法 | 功能 |
---|---|
PutInstanceAsync | 修改 |
DeleteClassAsync | 删除 |
注意
由于对接收器的回调可能不会以客户端所需的相同身份验证级别返回,因此建议使用半同步而不是异步通信。 有关详细信息,请参阅调用方法。
类提供程序应提供一个存根实现,该实现为不支持功能集的所有其他 IWbemServices 方法返回 WBEM_E_PROVIDER_NOT_CAPABLE。 具体而言,WMI 不支持对类提供程序进行查询处理。 因此,类提供程序必须从其 IWbemServices::ExecQueryAsync 的实现中返回 WBEM_E_PROVIDER_NOT_CAPABLE,将其 QuerySupportLevels 注册属性设置为 NULL,或同时返回两者。
类提供程序实现的接口与实例提供程序和方法提供程序的接口非常相似。 事实上,通过实现所有方法并正确注册,单个提供程序可以充当所有三种类型的提供程序。