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
WMI データ ブロックに関する構成情報を含む呼び出し元初期化 WDF_WMI_PROVIDER_CONFIG 構造体へのポインター。
[in, optional] ProviderAttributes
新しい WMI プロバイダー オブジェクトのドライバー指定のオブジェクト属性を含む呼び出し元によって割り当てられた WDF_OBJECT_ATTRIBUTES 構造体へのポインター。 (構造体の ParentObject メンバーは NULL である必要があります)。このパラメーターは省略可能であり、WDF_NO_OBJECT_ATTRIBUTESできます。
[out] WmiProvider
新しい WMI プロバイダー オブジェクトへのハンドルを受け取る場所へのポインター。
戻り値
操作が成功した場合、WdfWmiProviderCreate はSTATUS_SUCCESSを返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。
リターン コード | 説明 |
---|---|
|
無効なパラメーターが検出されました。 |
|
WmiProviderConfig パラメーターが指すWDF_WMI_PROVIDER_CONFIG構造体のサイズが正しくありません。 |
|
操作を完了するためのメモリが不足していました。 |
|
ドライバーは、指定されたデバイスと WMI データ ブロックに対して WdfWmiProviderCreate を既に呼び出しています。 |
WdfWmiProviderCreate メソッドが返す可能性があるその他の戻り値の一覧については、「フレームワーク オブジェクト作成エラー」を参照してください。
このメソッドは、他の NTSTATUS 値を返す場合もあります。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
注釈
ドライバーがプロバイダーの複数のインスタンスを作成する場合、ドライバーは WdfWmiProviderCreate を呼び出して WMI プロバイダー オブジェクトを作成する必要があります。 ドライバーがプロバイダーのインスタンスを 1 つだけ作成する場合、最初に WdfWmiProviderCreate を 呼び出さずに WdfWmiInstanceCreate を呼び出すことができます。
ドライバーは、いつでも 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 |
Header | wdfwmi.h (Wdf.h を含む) |
Library | Wdf01000.sys (「Framework ライブラリのバージョン管理」を参照)。 |
IRQL | <=DISPATCH_LEVEL |
DDI コンプライアンス規則 | DriverCreate(kmdf)、 KmdfIrql(kmdf)、 KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf) |