在驱动程序中初始化 WMI 支持

[仅适用于 KMDF]

若要支持 WMI 数据块,基于框架的驱动程序:

  • (MOF 注册托管对象格式,) Wmicore.mof 中未定义的任何自定义 WMI 数据提供程序的资源名称。

  • 创建一个或多个 WMI 实例对象以表示它可以读取或写入的数据块。

  • (可选)实现一个或多个事件回调函数,以提供驱动程序提供的 WMI 数据。

  • 注册每个 WMI 实例对象,使其可供 WMI 客户端使用。

为了初始化其 WMI 支持,KMDF 驱动程序遵循以下步骤,通常在其 EvtDriverDeviceAddEvtDeviceSelfManagedIoInit 回调中:

  1. 提供 MOF 文件以支持自定义 WMI 数据提供程序的驱动程序必须调用 WdfDeviceAssignMofResourceName 方法以注册 MOF 资源名称,然后驱动程序才能创建表示数据提供程序的 WMI 提供程序对象。

  2. 初始化 WMI 提供程序配置结构,并根据需要 (WDFWMIPROVIDER) 创建 WMI 提供程序对象。

  3. 初始化 WMI 实例配置结构,并 (WDFWMIINSTANCE) 创建 WMI 实例对象。

默认情况下,当 KMDF 驱动程序创建其第一个 WMI 实例时,框架会创建 WMI 提供程序。 因此,如果驱动程序只需要一个 WMI 提供程序,则无需 (WdfWmiProviderCreate) 调用提供程序创建方法。 但是,驱动程序必须填充提供程序配置结构,因为此结构提供有关框架在创建实例时使用的提供程序的信息。

如果驱动程序创建它支持的每个 WMI 数据块的单个实例,驱动程序将调用 WdfWmiInstanceCreate,同时传递 WDF_WMI_PROVIDER_CONFIG 结构和 WDF_WMI_INSTANCE_CONFIG 结构。 此单个调用既配置单个框架提供的 WMI 提供程序对象,又创建 WMI 实例对象。

如果驱动程序创建其 WMI 数据块的多个实例,则驱动程序必须同时调用 WdfWmiProviderCreateWdfWmiInstanceCreate

注册提供程序实例

在 WMI 客户端可以访问驱动程序的 WMI 数据块之前,驱动程序必须将其提供程序实例注册到系统的 WMI 服务。 驱动程序可以使用以下任一技术来注册提供程序实例:

(删除实例的设备并在调用 EvtDeviceSelfManagedIoCleanup 事件回调函数) 之前,框架会自动取消注册每个提供程序实例。 有关框架调用驱动程序回调函数的顺序的信息,请参阅 PnP 和电源管理方案

驱动程序可以随时通过调用 WdfWmiInstanceDeregister 取消注册实例。