WdfWmiProviderCreate 函数 (wdfwmi.h)

[仅适用于 KMDF]

WdfWmiProviderCreate 方法创建表示 WMI 数据块的 WMI 提供程序对象。

语法

NTSTATUS WdfWmiProviderCreate(
  [in]           WDFDEVICE                Device,
  [in]           PWDF_WMI_PROVIDER_CONFIG WmiProviderConfig,
  [in, optional] PWDF_OBJECT_ATTRIBUTES   ProviderAttributes,
  [out]          WDFWMIPROVIDER           *WmiProvider
);

参数

[in] Device

框架设备对象的句柄,该对象将成为新提供程序对象的父对象。 设备对象不能是 控制设备对象

[in] WmiProviderConfig

指向调用方初始化 WDF_WMI_PROVIDER_CONFIG 结构的指针,该结构包含有关 WMI 数据块的配置信息。

[in, optional] ProviderAttributes

指向调用方分配 的WDF_OBJECT_ATTRIBUTES 结构的指针,该结构包含驱动程序为新的 WMI 提供程序对象提供的对象属性。 (结构的 ParentObject 成员必须为 NULL。) 此参数是可选的,可以WDF_NO_OBJECT_ATTRIBUTES。

[out] WmiProvider

指向接收新 WMI 提供程序对象的句柄的位置的指针。

返回值

如果操作成功,WdfWmiProviderCreate 将返回STATUS_SUCCESS。 否则,此方法可能会返回以下值之一:

返回代码 说明
STATUS_INVALID_PARAMETER
检测到参数无效。
STATUS_INFO_LENGTH_MISMATCH
WmiProviderConfig 参数指向的WDF_WMI_PROVIDER_CONFIG结构的大小不正确。
STATUS_INSUFFICIENT_RESOURCES
内存不足,无法完成操作。
STATUS_OBJECT_NAME_EXISTS
驱动程序已为指定的设备和 WMI 数据块调用了 WdfWmiProviderCreate
 

有关 WdfWmiProviderCreate 方法可能返回的其他返回值的列表,请参阅 框架对象创建错误

此方法还可能返回其他 NTSTATUS 值

如果驱动程序提供无效的对象句柄,则会发生 bug 检查。

注解

如果驱动程序将创建提供程序的多个实例,驱动程序必须调用 WdfWmiProviderCreate 来创建 WMI 提供程序对象。 如果驱动程序将仅创建提供程序的一个实例,则可以调用 WdfWmiInstanceCreate ,而无需先调用 WdfWmiProviderCreate

驱动程序可以随时调用 WdfWmiProviderCreate,但驱动程序通常从其 EvtDriverDeviceAdd 回调函数内部调用 WdfWmiProviderCreate

每个 WMI 提供程序对象的父对象都是设备的框架设备对象。 驱动程序无法更改此父级, 并且 ParentObject 成员或 WDF_OBJECT_ATTRIBUTES 结构必须为 NULL

驱动程序调用 WdfWmiProviderCreate 后,驱动程序可以调用 WdfWmiProviderGetDevice 来检索提供程序对象的父设备对象的句柄。

驱动程序创建 WMI 提供程序对象后,驱动程序无法删除该对象。 框架在删除表示设备的框架设备对象时删除设备的 WMI 提供程序对象。 WMI 提供程序对象使用最少的系统资源。

有关 WdfWmiProviderCreate 方法的详细信息,请参阅 支持 Framework-Based 驱动程序中的 WMI

示例

下面的代码示例初始化 WDF_WMI_PROVIDER_CONFIG 结构并调用 WdfWmiProviderCreate

WDF_WMI_PROVIDER_CONFIG config;
WDFWMIPROVIDER provider;
GUID providerGuid = MY_WMI_DATA_BLOCK_GUID;
NTSTATUS status;

WDF_WMI_PROVIDER_CONFIG_INIT(
                             &config,
                             providerGuid
                             );
config.Flags = WdfWmiProviderTracing;
config.EvtWmiProviderFunctionControl = MyProviderFunctionControl;

status = WdfWmiProviderCreate(
                              Device,
                              &config,
                              WDF_NO_OBJECT_ATTRIBUTES,
                              &provider
                              );

要求

要求
目标平台 通用
最低 KMDF 版本 1.0
标头 wdfwmi.h (包括 Wdf.h)
Library Wdf01000.sys (请参阅框架库 Versioning.)
IRQL <=DISPATCH_LEVEL
DDI 符合性规则 DriverCreate (kmdf) KmdfIrql (kmdf) KmdfIrql2 (kmdf) 、 KmdfIrqlExplicit (kmdf)

另请参阅

EvtDriverDeviceAdd

WDF_OBJECT_ATTRIBUTES

WDF_WMI_PROVIDER_CONFIG

WdfWmiInstanceCreate

WdfWmiProviderGetDevice