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 值

如果驱动程序提供无效的对象句柄,则会发生系统 bug 检查。

注解

注意

无法为 控制设备调用 WdfDeviceAddQueryInterface。

创建驱动程序定义接口的驱动程序通常从 EvtDriverDeviceAddEvtDevicePrepareHardware 回调函数中调用 WdfDeviceAddQueryInterface

在驱动程序调用 WdfDeviceAddQueryInterface 来创建驱动程序定义的接口之后,另一个基于框架的驱动程序可以通过调用 WdfFdoQueryForInterface 来访问该接口。

有关驱动程序定义的接口的详细信息,请参阅 使用 Driver-Defined 接口

示例

以下代码示例来自 Toaster 示例总线驱动程序。 此示例创建一个驱动程序定义的接口,该接口使用烤箱示例的 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
标头 wdfqueryinterface.h (包括 Wdf.h)
Library Wdf01000.sys (请参阅框架库版本控制.)
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