次の方法で共有


WdfWmiInstanceCreate 関数 (wdfwmi.h)

[KMDF にのみ適用]

WdfWmiInstanceCreate メソッドは、WMI データ プロバイダーのインスタンスを表す WMI インスタンス オブジェクトを作成します。

構文

NTSTATUS WdfWmiInstanceCreate(
  [in]            WDFDEVICE                Device,
  [in]            PWDF_WMI_INSTANCE_CONFIG InstanceConfig,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES   InstanceAttributes,
  [out, optional] WDFWMIINSTANCE           *Instance
);

パラメーター

[in] Device

インスタンスが作成されるデバイスを表すフレームワーク デバイス オブジェクトへのハンドル。 デバイス オブジェクトを コントロール デバイス オブジェクトすることはできません。

[in] InstanceConfig

WMI データ プロバイダーのインスタンスの構成情報を含む、呼び出し元で初期化された WDF_WMI_INSTANCE_CONFIG 構造体へのポインター。

[in, optional] InstanceAttributes

新しい WMI インスタンス オブジェクトのドライバー指定のオブジェクト属性を含む呼び出し元によって割り当てられた WDF_OBJECT_ATTRIBUTES 構造体へのポインター。 (構造体の ParentObject メンバーは NULL する必要があります)。このパラメーターは省略可能であり、WDF_NO_OBJECT_ATTRIBUTESできます。

[out, optional] Instance

新しい WMI インスタンス オブジェクトへのハンドルを受け取る場所へのポインター。 このパラメーターは省略可能であり、NULL できます。

戻り値

WdfWmiInstanceCreate は、操作が成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。

リターン コード 形容
STATUS_INVALID_PARAMETER
無効なパラメーターが検出されました。
STATUS_INFO_LENGTH_MISMATCH
InstanceConfig パラメーターが指す WDF_WMI_INSTANCE_CONFIG 構造体のサイズが正しくありません。
STATUS_INSUFFICIENT_RESOURCES
メモリが不足していました。
STATUS_INTEGER_OVERFLOW
ドライバーは、WDF_WMI_INSTANCE_CONFIG 構造体の UseContextForQuery メンバーを TRUE 設定しますが、InstanceAttributes パラメーターの WDF_OBJECT_ATTRIBUTES 構造体でULONG_MAXよりも大きいコンテキスト空間サイズを指定しました。
 

WdfWmiInstanceCreate メソッドが返す可能性があるその他の戻り値の一覧については、「Framework オブジェクト作成エラーの」を参照してください。

このメソッドは、他のNTSTATUS 値を返す場合もあります。

ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。

備考

ドライバーがプロバイダーの複数のインスタンスを作成している場合、ドライバーは WdfWmiProviderCreate を呼び出して、WdfWmiInstanceCreate 呼び出す前にプロバイダー オブジェクトを作成する必要があります。 ドライバーは、WDF_WMI_INSTANCE_CONFIG 構造体にハンドルを配置することによって、WdfWmiInstanceCreate するプロバイダー オブジェクトのハンドルを渡します。 (ドライバーがプロバイダー オブジェクト ハンドルを提供する場合、Device パラメーターは使用されず、NULL できます)。

ドライバーがプロバイダーの単一のインスタンスを作成している場合は、WdfWmiInstanceCreate を呼び出す前に、WdfWmiInstanceCreate呼び出す必要はありません。 この場合、WdfWmiInstanceCreate WMI プロバイダー オブジェクトも作成されます。 そのため、ドライバーのWDF_WMI_INSTANCE_CONFIG構造体には、WMI データ プロバイダーを記述する WDF_WMI_PROVIDER_CONFIG 構造体へのポインターを含める必要があります。

フレームワークは、ドライバーの物理デバイス オブジェクト (PDO) のデバイス インスタンス ID から、アプリケーションで使用できる動的インスタンス名を作成するように WMI に指示します。 (フレームワークは、Windows ドライバー モデル (WDM) ドライバーが IRP_MN_REGINFO または IRP_MN_REGINFO_EX 構造体に設定する静的インスタンス名をサポートしていません。

WMI インスタンス オブジェクトの親は WMI プロバイダー オブジェクトです。 ドライバーはこの親を変更できません。また、ParentObject メンバーまたは WDF_OBJECT_ATTRIBUTES 構造体は NULL する必要があります。

ドライバーが WdfWmiInstanceCreate 呼び出した後、WdfWmiInstanceGetProvider を呼び出して親プロバイダー オブジェクトへのハンドルを取得し、WdfWmiInstanceGetDevice してプロバイダーのデバイスへのハンドルを取得できます。

WdfWmiInstanceCreate メソッドの詳細については、「Framework-Based ドライバー での WMI のサポート」を参照してください。

InstanceConfig が指す WDF_WMI_INSTANCE_CONFIG 構造体の Register メンバーが TRUE 場合、このメソッドが IRQL = PASSIVE_LEVEL で呼び出され、IRQL > PASSIVE_LEVEL で呼び出された場合、WdfWmiInstanceCreate はプロバイダー インスタンスを同期的に (つまり、戻る前に) 非同期に登録します。

次のコード例は、PCIDRV サンプル ドライバーのコード例です。 この例では、デバイスの MOF リソース名を登録し、WDF_WMI_PROVIDER_CONFIG構造体とWDF_WMI_INSTANCE_CONFIG構造体を初期化し、WdfWmiInstanceCreate 呼び出します。

NTSTATUS
PciDrvWmiRegistration(
    WDFDEVICE  Device
    )
{
    WDF_WMI_PROVIDER_CONFIG  providerConfig;
    WDF_WMI_INSTANCE_CONFIG  instanceConfig;
    NTSTATUS  status;
    DECLARE_CONST_UNICODE_STRING(mofRsrcName, MOFRESOURCENAME);

    status = WdfDeviceAssignMofResourceName(
                                            Device,
                                            &mofRsrcName
                                            );
    if (!NT_SUCCESS(status)) {
        return status;
    }
    WDF_WMI_PROVIDER_CONFIG_INIT(
                                 &providerConfig,
                                 &PCIDRV_WMI_STD_DATA_GUID
                                 );
    providerConfig.MinInstanceBufferSize = sizeof(PCIDRV_WMI_STD_DATA);

    WDF_WMI_INSTANCE_CONFIG_INIT_PROVIDER_CONFIG(
                                                 &instanceConfig,
                                                 &providerConfig
                                                 );
    instanceConfig.Register = TRUE;
    instanceConfig.EvtWmiInstanceQueryInstance = EvtWmiDeviceInfoQueryInstance;
    instanceConfig.EvtWmiInstanceSetInstance = EvtWmiDeviceInfoSetInstance;

    status = WdfWmiInstanceCreate(
                                  Device,
                                  &instanceConfig,
                                  WDF_NO_OBJECT_ATTRIBUTES,
                                  WDF_NO_HANDLE
                                  );
    if (!NT_SUCCESS(status)) {
        return status;
    }
    return status;
}

必要条件

要件 価値
ターゲット プラットフォーム 万国
最小 KMDF バージョン 1.0
ヘッダー wdfwmi.h (Wdf.h を含む)
ライブラリ Wdf01000.sys (フレームワーク ライブラリのバージョン管理を参照)。
IRQL <=DISPATCH_LEVEL
DDI コンプライアンス規則 する DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

関連項目

IRP_MN_REGINFO

WDF_OBJECT_ATTRIBUTES

WDF_WMI_INSTANCE_CONFIG

WDF_WMI_INSTANCE_CONFIG_INIT_PROVIDER_CONFIG

WDF_WMI_PROVIDER_CONFIG

WDF_WMI_PROVIDER_CONFIG_INIT

WdfDeviceAssignMofResourceName

WdfWmiInstanceGetDevice

WdfWmiInstanceGetProvider

WdfWmiProviderCreate