EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST fungsi panggilan balik (wdfqueryinterface.h)

[Hanya berlaku untuk KMDF]

Fungsi panggilan balik peristiwa driver EvtDeviceProcessQueryInterfaceRequest memeriksa permintaan driver lain untuk akses ke antarmuka yang ditentukan driver, sebelum kerangka kerja meneruskan antarmuka ke driver yang meminta.

Sintaksis

EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST EvtWdfDeviceProcessQueryInterfaceRequest;

NTSTATUS EvtWdfDeviceProcessQueryInterfaceRequest(
  [in]      WDFDEVICE Device,
  [in]      LPGUID InterfaceType,
  [in, out] PINTERFACE ExposedInterface,
  [in, out] PVOID ExposedInterfaceSpecificData
)
{...}

Parameter

[in] Device

Handel ke objek perangkat kerangka kerja.

[in] InterfaceType

Penunjuk ke GUID yang mengidentifikasi antarmuka yang ditentukan driver.

[in, out] ExposedInterface

Penunjuk ke struktur ANTARMUKA yang menjelaskan antarmuka yang ditentukan driver dan disediakan oleh driver yang meminta akses ke antarmuka.

[in, out] ExposedInterfaceSpecificData

Penunjuk ke informasi tambahan, opsional, ditentukan driver, khusus antarmuka. Driver berbasis kerangka kerja menentukan nilai ini dengan menyediakan nilai parameter AntarmukaNULL non- AntarmukaSpecificData saat memanggil WdfFdoQueryForInterface.

Mengembalikan nilai

Jika fungsi panggilan balik EvtDeviceProcessQueryInterfaceRequest menerima GUID yang didukungnya, dan jika fungsi tidak mengalami kesalahan, fungsi harus mengembalikan STATUS_SUCCESS atau nilai status lain yang NT_SUCCESS( status) sama dengan TRUE. Kerangka kerja terus meneruskan permintaan ke tumpukan untuk melihat apakah driver tambahan juga mendukung antarmuka.

Fungsi panggilan balik EvtDeviceProcessQueryInterfaceRequest harus mengembalikan STATUS_NOT_SUPPORTED jika menentukan bahwa, untuk kasus tertentu, fungsi ini tidak akan melayani antarmuka. Kerangka kerja terus meneruskan permintaan ke tumpukan untuk melihat apakah driver lain mendukung antarmuka. Untuk informasi selengkapnya tentang situasi ini, lihat bagian Keterangan berikut ini.

Jika fungsi panggilan balik mengalami kesalahan, fungsi tersebut harus mengembalikan nilai status yang NT_SUCCESS( status) sama dengan FALSE. Kerangka kerja gagal permintaan driver lain untuk antarmuka dan tidak meneruskan permintaan ke tumpukan.

Komentar

Driver berbasis kerangka kerja mendaftarkan fungsi panggilan balik peristiwa EvtDeviceProcessQueryInterfaceRequest dengan memanggil WdfDeviceAddQueryInterface.

Jika antarmuka yang ditentukan driver hanya mendukung komunikasi satu arah dan mengatur ImportInterface anggota struktur WDF_QUERY_INTERFACE_CONFIG yang menjelaskan antarmuka untuk FALSE, fungsi panggilan balik EvtDeviceProcessQueryInterfaceReque st bersifat opsional. Ketika driver lain memanggil WdfFdoQueryForInterface, kerangka kerja menyalin nilai antarmuka yang ditentukan driver ke dalam struktur ANTARMUKA driver yang meminta lalu memanggil fungsi panggilan balik. Untuk komunikasi satu arah, Anda perlu menyediakan fungsi panggilan balik hanya jika Anda ingin driver memeriksa, dan mungkin memodifikasi, nilai antarmuka sebelum kerangka kerja mengembalikannya ke driver yang meminta.

Driver Anda harus menyediakan fungsi panggilan balik peristiwa EvtDeviceProcessQueryInterfaceRequest jika driver menentukan antarmuka yang mendukung komunikasi dua arah (dan mengatur ImportInterface anggota struktur WDF_QUERY_INTERFACE_CONFIG untuk TRUE). Fungsi panggilan balik diperlukan karena, jika ImportInterface TRUE dan panggilan driver lain WdfFdoQueryForInterface, kerangka kerja tidak menyalin antarmuka yang ditentukan driver ke dalam struktur antarmuka driver yang meminta. Sebagai gantinya, fungsi panggilan balik harus memperbarui struktur antarmuka driver yang meminta.

Fungsi panggilan balik dapat mengubah antarmuka. Secara khusus, ia dapat:

  • Ubah nilai apa pun di setiap anggota antarmuka.
  • Alokasikan konteks khusus instans dinamis dengan memodifikasi Context anggota struktur ANTARMUKA .
Kerangka kerja memanggil fungsi panggilan balik driver Anda EvtDeviceProcessQueryInterfaceRequest fungsi panggilan balik hanya untuk GUID yang telah didaftarkan driver dengan memanggil WdfDeviceAddQueryInterface. Oleh karena itu, fungsi panggilan balik ini tidak menggunakan nilai pengembalian STATUS_NOT_SUPPORTED untuk melaporkan GUID yang tidak terduga. Sebagai gantinya, fungsi panggilan balik EvtDeviceProcessQueryInterfaceRequest harus mengembalikan STATUS_NOT_SUPPORTED ketika menentukan bahwa, untuk kasus tertentu, itu tidak akan menangani antarmuka. Misalnya, berdasarkan data yang disediakan driver yang meminta, driver Anda mungkin menentukan bahwa driver tingkat bawah harus melayani permintaan antarmuka. Nilai pengembalian STATUS_NOT_SUPPORTED menginformasikan kerangka kerja bahwa driver Anda tidak melayani permintaan antarmuka, tetapi driver tingkat bawah mungkin melayaninya.

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

Contoh

Untuk menentukan fungsi panggilan balik EvtDeviceProcessQueryInterfaceRequest, Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis fungsi panggilan balik yang Anda tentukan. Windows menyediakan sekumpulan tipe fungsi panggilan balik untuk pengandar. Mendeklarasikan fungsi menggunakan jenis fungsi panggilan balik membantu Analisis Kode untuk Driver, Pemverifikasi Driver Statis (SDV), dan alat verifikasi lainnya menemukan kesalahan, dan itu adalah persyaratan untuk menulis driver untuk sistem operasi Windows.

Misalnya, untuk menentukan fungsi panggilan balik EvtDeviceProcessQueryInterfaceRequest yang diberi nama MyDeviceProcessQueryInterfaceRequest, gunakan jenis EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST seperti yang ditunjukkan dalam contoh kode ini:

EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST  MyDeviceProcessQueryInterfaceRequest;

Kemudian, terapkan fungsi panggilan balik Anda sebagai berikut:

_Use_decl_annotations_
NTSTATUS
 MyDeviceProcessQueryInterfaceRequest (
    WDFDEVICE  Device,
    LPGUID  InterfaceType,
    PINTERFACE  ExposedInterface,
    PVOID  ExposedInterfaceSpecificData
    )
  {...}

Jenis fungsi EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST didefinisikan dalam file header WdfQueryInterface.h. Untuk mengidentifikasi kesalahan dengan lebih akurat saat Anda menjalankan alat analisis kode, pastikan untuk menambahkan anotasi Use_decl_annotations ke definisi fungsi Anda. Anotasi Use_decl_annotations memastikan bahwa anotasi yang diterapkan ke jenis fungsi EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST dalam file header digunakan. Untuk informasi selengkapnya tentang persyaratan untuk deklarasi fungsi, lihat Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver KMDF. Untuk informasi tentang Use_decl_annotations, lihat Anotasi Perilaku Fungsi.

Persyaratan

Syarat Nilai
Platform Target Universal
versi KMDF Minimum 1.0
Header wdfqueryinterface.h (termasuk Wdf.h)
IRQL PASSIVE_LEVEL

Lihat juga

ANTARMUKA

WDF_QUERY_INTERFACE_CONFIG

WdfDeviceAddQueryInterface

WdfFdoQueryForInterface