共用方式為


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結構的大小不正確。
資源不足狀態
記憶體不足。
 

如需其他傳回值的清單,請參閱 Framework 物件建立錯誤。

此方法也可能 傳回其他NTSTATUS 值。

如果驅動程式提供無效的物件句柄,就會發生系統錯誤檢查。

備註

建立驅動程式定義介面的驅動程式通常會從 EvtDriverDeviceAddEvtDevicePrepareHardware 回呼函式內呼叫 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
標題 wdfqueryinterface.h (包括 Wdf.h)
程式庫 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