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。 否则,此方法可能会返回以下值之一:
返回代码 | 说明 |
---|---|
|
检测到参数无效。 |
|
WmiProviderConfig 参数指向的WDF_WMI_PROVIDER_CONFIG结构的大小不正确。 |
|
内存不足,无法完成操作。 |
|
驱动程序已为指定的设备和 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) |