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。 否則,此方法可能會傳回下列其中一個值:
傳回碼 | Description |
---|---|
|
方法在錯誤的 IRQL 呼叫。 |
|
輸入參數 (可能包含WDF_QUERY_INTERFACE_CONFIG結構) 的成員無效。 |
|
WDF_QUERY_INTERFACE_CONFIG結構的大小不正確。 |
|
記憶體不足。 |
如需其他傳回值的清單,請參閱 Framework 物件建立錯誤。
這個方法也可能傳回其他 NTSTATUS值。
如果驅動程式提供無效的物件句柄,就會發生系統錯誤檢查。
備註
注意
無法針對 控制裝置呼叫 WdfDeviceAddQueryInterface。
建立驅動程式定義介面的驅動程式通常會從 EvtDriverDeviceAdd 或 EvtDevicePrepareHardware 回呼函式內呼叫 WdfDeviceAddQueryInterface。
在驅動程式呼叫 WdfDeviceAddQueryInterface 以建立驅動程式定義的介面之後,另一個架構型驅動程式可以藉由呼叫 WdfFdoQueryForInterface 來存取介面。
如需驅動程式定義介面的詳細資訊,請參閱 使用 Driver-Defined 介面。
範例
下列程式代碼範例來自 Toaster 範例總線驅動程式。 這個範例會建立驅動程式定義的介面,該介面會使用TOASTER_INTERFACE_STANDARD的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;
}
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最小 KMDF 版本 | 1.0 |
標頭 | wdfqueryinterface.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (請參閱 Framework Library Versioning.) |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | DriverCreate (kmdf) 、 KmdfIrql (kmdf) 、 KmdfIrql2 (kmdf) 、 KmdfIrqlExplicit (kmdf) |
另請參閱
WDF_QUERY_INTERFACE_CONFIG_INIT
WdfDeviceInterfaceDereferenceNoOp