[仅适用于 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 方法可能返回的其他返回值的列表,请参阅 Framework 对象创建错误。
此方法还可以 返回其他NTSTATUS 值。
如果驱动程序提供无效的对象句柄,则会发生 bug 检查。
言论
如果驱动程序将创建提供程序的多个实例,驱动程序必须调用 WdfWmiProviderCreate 来创建 WMI 提供程序对象。 如果驱动程序只创建提供程序的一个实例,则它可以调用 WdfWmiInstanceCreate,而无需先调用 WdfWmiProviderCreate。
驱动程序可以随时调用 WdfWmiProviderCreate,但驱动程序通常从其 EvtDriverDeviceAdd 回调函数中调用 WdfWmiProviderCreate。
每个 WMI 提供程序对象的父对象是设备的框架设备对象。 驱动程序无法更改此父级,并且 ParentObject 成员或 WDF_OBJECT_ATTRIBUTES 结构必须 NULL。
驱动程序调用 WdfWmiProviderCreate后,驱动程序可以调用 WdfWmiProviderGetDevice 来检索提供程序对象的父设备对象的句柄。
驱动程序创建 WMI 提供程序对象后,驱动程序无法删除该对象。 当框架删除表示设备的框架设备对象时,框架将删除设备的 WMI 提供程序对象。 WMI 提供程序对象使用最少的系统资源。
有关 WdfWmiProviderCreate 方法的详细信息,请参阅 Framework-Based Drivers中支持 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) |
库 | Wdf01000.sys(请参阅框架库版本控制。 |
IRQL | <=DISPATCH_LEVEL |
DDI 符合性规则 | DriverCreate(kmdf),KmdfIrql(kmdf),KmdfIrql2(kmdf),KmdfIrqlExplicit(kmdf) |