Bagikan melalui


Fungsi WdfDeviceAddQueryInterface (wdfqueryinterface.h)

[Hanya berlaku untuk KMDF]

Metode WdfDeviceAddQueryInterface membuat antarmuka yang ditentukan driver yang dapat dikueri dan digunakan driver lain.

Sintaksis

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

Parameter-parameternya

[in] Device

Handel ke objek perangkat kerangka kerja.

[in] InterfaceConfig

Penunjuk ke struktur WDF_QUERY_INTERFACE_CONFIG yang dialokasikan driver yang menjelaskan antarmuka.

Mengembalikan nilai

WdfDeviceAddQueryInterface mengembalikan STATUS_SUCCESS jika operasi berhasil. Jika tidak, metode ini mungkin mengembalikan salah satu nilai berikut:

Mengembalikan kode Deskripsi
STATUS_INVALID_DEVICE_REQUEST
Metode ini dipanggil pada IRQL yang salah.
STATUS_INVALID_PARAMETER
Parameter input (mungkin termasuk anggota struktur WDF_QUERY_INTERFACE_CONFIG) tidak valid.
STATUS_INFO_LENGTH_MISMATCH
Ukuran struktur WDF_QUERY_INTERFACE_CONFIG salah.
STATUS_sumber_DAYA_TIDAK_MEMADAI
Memori tidak cukup.
 

Untuk daftar nilai pengembalian tambahan, lihat Kesalahan Pembuatan Objek Kerangka Kerja.

Metode ini mungkin juga mengembalikan nilai NTSTATUS lainnya.

Pemeriksaan bug sistem terjadi jika driver menyediakan handel objek yang tidak valid.

Komentar

Nota

WdfDeviceAddQueryInterface tidak dapat dipanggil untuk perangkat kontrol .

Driver yang membuat antarmuka yang ditentukan driver biasanya memanggil WdfDeviceAddQueryInterface dari dalam fungsi panggilan balik EvtDriverDeviceAdd atau EvtDevicePrepareHardware.

Setelah driver memanggil WdfDeviceAddQueryInterface untuk membuat antarmuka yang ditentukan driver, driver berbasis kerangka kerja lain dapat mengakses antarmuka dengan memanggil WdfFdoQueryForInterface.

Untuk informasi selengkapnya tentang antarmuka yang ditentukan driver, lihat Menggunakan Antarmuka Driver-Defined.

Contoh

Contoh kode berikut berasal dari Toaster contoh driver bus. Contoh ini membuat antarmuka yang ditentukan driver yang menggunakan struktur TOASTER_INTERFACE_STANDARD sampel pemangsa.

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;
}

Persyaratan

Persyaratan Nilai
Platform Target Universal
versi KMDF Minimum 1.0
Tajuk wdfqueryinterface.h (termasuk Wdf.h)
Perpustakaan Wdf01000.sys (lihat Penerapan Versi Pustaka Kerangka Kerja.)
IRQL PASSIVE_LEVEL
aturan kepatuhan DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Lihat juga

EvtDevicePrepareHardware

EvtDriverDeviceAdd

WDF_QUERY_INTERFACE_CONFIG

WDF_QUERY_INTERFACE_CONFIG_INIT

WdfDeviceInterfaceDereferenceNoOp

WdfDeviceInterfaceReferenceNoOp

WdfFdoQueryForInterface