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。 否则,此方法可能会返回以下值之一:
返回代码 | 说明 |
---|---|
|
在错误的 IRQL 中调用了 方法。 |
|
输入参数 (可能包含WDF_QUERY_INTERFACE_CONFIG结构的成员) 无效。 |
|
WDF_QUERY_INTERFACE_CONFIG结构的大小不正确。 |
|
内存不足。 |
有关其他返回值的列表,请参阅 框架对象创建错误。
此方法还可能返回其他 NTSTATUS 值。
如果驱动程序提供无效的对象句柄,则会发生系统 bug 检查。
注解
注意
无法为 控制设备调用 WdfDeviceAddQueryInterface。
创建驱动程序定义接口的驱动程序通常从 EvtDriverDeviceAdd 或 EvtDevicePrepareHardware 回调函数中调用 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) |
另请参阅
WDF_QUERY_INTERFACE_CONFIG_INIT
WdfDeviceInterfaceDereferenceNoOp