次の方法で共有


WdfDeviceAddQueryInterface 関数 (wdfqueryinterface.h)

[KMDF にのみ適用]

WdfDeviceAddQueryInterface メソッドは、他のドライバーがクエリを実行して使用できるドライバー定義インターフェイスを作成します。

構文

NTSTATUS WdfDeviceAddQueryInterface(
  [in] WDFDEVICE                   Device,
  [in] PWDF_QUERY_INTERFACE_CONFIG InterfaceConfig
);

パラメーター

[in] Device

フレームワーク デバイス オブジェクトへのハンドル。

[in] InterfaceConfig

インターフェイスを記述するドライバーによって割り当てられた WDF_QUERY_INTERFACE_CONFIG 構造体へのポインター。

戻り値

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

リターン コード 説明
STATUS_INVALID_DEVICE_REQUEST
メソッドが間違った IRQL で呼び出されました。
STATUS_INVALID_PARAMETER
入力パラメーター (WDF_QUERY_INTERFACE_CONFIG 構造体のメンバーを含む可能性があります) が無効です。
STATUS_INFO_LENGTH_MISMATCH
WDF_QUERY_INTERFACE_CONFIG構造体のサイズが正しくありません。
STATUS_INSUFFICIENT_RESOURCES
メモリが不足していました。
 

その他の戻り値の一覧については、「 フレームワーク オブジェクト作成エラー」を参照してください。

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

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

注釈

注意

コントロール デバイスに対して WdfDeviceAddQueryInterface を呼び出すことはできません。

ドライバー定義インターフェイスを作成するドライバーは、通常、EvtDriverDeviceAdd または EvtDevicePrepareHardware コールバック関数内から WdfDeviceAddQueryInterface を呼び出します。

ドライバーが WdfDeviceAddQueryInterface を呼び出してドライバー定義インターフェイスを作成した後、別のフレームワーク ベースのドライバーは 、WdfFdoQueryForInterface を呼び出すことによってインターフェイスにアクセスできます。

ドライバー定義インターフェイスの詳細については、「 Driver-Defined インターフェイスの使用」を参照してください。

次のコード例は、 トースター サンプル バス ドライバーのコード例です。 この例では、トースター サンプルのTOASTER_INTERFACE_STANDARD構造を使用するドライバー定義インターフェイスを作成します。

typedef struct _TOASTER_INTERFACE_STANDARD {
 INTERFACE  InterfaceHeader;
  PTOASTER_GET_CRISPINESS_LEVEL  GetCrispinessLevel;
  PTOASTER_SET_CRISPINESS_LEVEL  SetCrispinessLevel;
  PTOASTER_IS_CHILD_PROTECTED  IsSafetyLockEnabled;
} TOASTER_INTERFACE_STANDARD, *PTOASTER_INTERFACE_STANDARD;

TOASTER_INTERFACE_STANDARD  ToasterInterface;
WDF_QUERY_INTERFACE_CONFIG  qiConfig;

//
// Initialize the ToasterInterface structure.
//
RtlZeroMemory(
              &ToasterInterface,
              sizeof(ToasterInterface)
              );

ToasterInterface.InterfaceHeader.Size = sizeof(ToasterInterface);
ToasterInterface.InterfaceHeader.Version = 1;
ToasterInterface.InterfaceHeader.Context = (PVOID)hChild;

ToasterInterface.InterfaceHeader.InterfaceReference =
        WdfDeviceInterfaceReferenceNoOp;
ToasterInterface.InterfaceHeader.InterfaceDereference =
        WdfDeviceInterfaceDereferenceNoOp;

ToasterInterface.GetCrispinessLevel = Bus_GetCrispinessLevel;
ToasterInterface.SetCrispinessLevel = Bus_SetCrispinessLevel;
ToasterInterface.IsSafetyLockEnabled = Bus_IsSafetyLockEnabled;

//
// Initialize the qiConfig structure.
//
WDF_QUERY_INTERFACE_CONFIG_INIT(
                                &qiConfig,
                                (PINTERFACE)&ToasterInterface,
                                &GUID_TOASTER_INTERFACE_STANDARD,
                                NULL
                                );

//
// Create the interface.
//
status = WdfDeviceAddQueryInterface(
                                    hChild,
                                    &qiConfig
                                    );
if (!NT_SUCCESS(status)) {
    return status;
}

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
Header wdfqueryinterface.h (Wdf.h を含む)
Library Wdf01000.sys (「Framework ライブラリのバージョン管理」を参照)。
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 DriverCreate(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf)

こちらもご覧ください

EvtDevicePrepareHardware

EvtDriverDeviceAdd

WDF_QUERY_INTERFACE_CONFIG

WDF_QUERY_INTERFACE_CONFIG_INIT

WdfDeviceInterfaceDereferenceNoOp

WdfDeviceInterfaceReferenceNoOp

WdfFdoQueryForInterface