EVT_WDFDEVICE_WDM_IRP_PREPROCESS fungsi panggilan balik (wdfdevice.h)

[Berlaku untuk KMDF saja]

Fungsi panggilan balik peristiwa EvtDeviceWdmIrpPreprocess driver menerima IRP sebelum kerangka kerja memproses IRP.

Sintaks

EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;

NTSTATUS EvtWdfdeviceWdmIrpPreprocess(
  [in]      WDFDEVICE Device,
  [in, out] PIRP Irp
)
{...}

Parameter

[in] Device

Handel ke objek perangkat kerangka kerja.

[in, out] Irp

Penunjuk ke struktur IRP .

Nilai kembali

Fungsi panggilan balik EvtDeviceWdmIrpPreprocess harus:

  • Atur anggota IoStatus.Status dari IRP ke STATUS_SUCCESS atau nilai status lain yang NT_SUCCESS(status) sama dengan TRUE, dan kembalikan nilai yang sama (setelah memanggil IoCompleteRequest), jika fungsi panggilan balik berhasil menyelesaikan IRP yang diterima.
  • Atur anggota IoStatus.Status dari IRP ke nilai status yang NT_SUCCESS(status) sama dengan FALSE, dan kembalikan nilai yang sama (setelah memanggil IoCompleteRequest), jika fungsi panggilan balik mendeteksi kesalahan.
  • Kembalikan STATUS_PENDING, jika fungsi panggilan balik memanggil IoMarkIrpPending.
  • Mengembalikan nilai yang dikembalikan metode WdfDeviceWdmDispatchPreprocessedIrp , jika fungsi panggilan balik memanggil metode tersebut.

Keterangan

Untuk mendaftarkan fungsi panggilan balik EvtDeviceWdmIrpPreprocess , driver Anda harus memanggil WdfDeviceInitAssignWdmIrpPreprocessCallback.

Driver Anda dapat menggunakan fungsi panggilan balik EvtDeviceWdmIrpPreprocess untuk melakukan salah satu atau semua hal berikut:

  • Tangani IRP yang tidak didukung kerangka kerja, dengan mengikuti aturan WDM untuk menangani RUNP.
  • Memproses IRP terlebih dahulu sebelum kerangka kerja menanganinya.
  • Atur rutinitas penyelesaian sehingga driver dapat melakukan pascaprosces IRP setelah kerangka kerja menanganinya.
Untuk informasi selengkapnya tentang cara mengimplementasikan fungsi panggilan balik EvtDeviceWdmIrpPreprocess , lihat Menangani IRP WDM Di Luar Kerangka Kerja.

Jika Anda ingin kerangka kerja kemudian menangani IRP seperti yang terjadi jika fungsi panggilan balik EvtDeviceWdmIrpPreprocess belum dipanggil, fungsi panggilan balik harus memanggil WdfDeviceWdmDispatchPreprocessedIrp untuk mengembalikan IRP ke kerangka kerja.

Jika driver Anda mendaftarkan fungsi panggilan balik EvtDeviceWdmIrpPreprocess , kerangka kerja menambahkan lokasi tumpukan I/O tambahan ke IRP yang diterima fungsi panggilan balik. Lokasi tumpukan I/O tambahan memungkinkan fungsi panggilan balik untuk mengatur rutinitas IoCompletion sebelum memanggil WdfDeviceWdmDispatchPreprocessedIrp.

Fungsi panggilan balik EvtDeviceWdmIrpPreprocess dipanggil di IRQL utas panggilan. IRQL ditentukan oleh jenis IRP yang diteruskan kerangka kerja ke EvtDeviceWdmIrpPreprocess. Misalnya, jika manajer PnP mengirim IRP_MN_QUERY_DEVICE_RELATIONS di IRQL = PASSIVE_LEVEL, kerangka kerja memanggil EvtDeviceWdmIrpPreprocess di IRQL = PASSIVE_LEVEL.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Versi KMDF minimum 1,0
Header wdfdevice.h (termasuk Wdf.h)
IRQL <=DISPATCH_LEVEL

Lihat juga

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp