EVT_WDFDEVICE_WDM_IRP_DISPATCH fungsi panggilan balik (wdfdevice.h)
[Berlaku untuk KMDF dan UMDF]
Fungsi panggilan balik peristiwa EvtDeviceWdmIrpDispatch driver menerima IRP sebelum kerangka kerja memproses IRP.
Sintaks
EVT_WDFDEVICE_WDM_IRP_DISPATCH EvtWdfdeviceWdmIrpDispatch;
NTSTATUS EvtWdfdeviceWdmIrpDispatch(
[in] WDFDEVICE Device,
[in] UCHAR MajorFunction,
[in] UCHAR MinorFunction,
[in] ULONG Code,
[in] WDFCONTEXT DriverContext,
[in, out] PIRP Irp,
[in] WDFCONTEXT DispatchContext
)
{...}
Parameter
[in] Device
Handel ke objek perangkat kerangka kerja.
[in] MajorFunction
Salah satu kode fungsi utama IRP yang didefinisikan dalam wdm.h.
[in] MinorFunction
Salah satu kode fungsi minor I/O IRP yang didefinisikan dalam wdm.h untuk kode MajorFunction .
[in] Code
Menentukan nilai kode kontrol I/O. Parameter ini hanya valid jika MajorFunction diatur ke IRP_MJ_DEVICE_CONTROL.
[in] DriverContext
Penunjuk yang tidak ditik ke informasi konteks yang ditentukan driver yang disediakan driver ketika disebut WdfDeviceConfigureWdmIrpDispatchCallback.
[in, out] Irp
Penunjuk ke struktur IRP.
[in] DispatchContext
Penunjuk yang tidak dijelajahi ke informasi konteks pengiriman kerangka kerja. Driver harus menyediakan parameter ini ketika memanggil WdfDeviceWdmDispatchIrp.
Nilai kembali
Fungsi panggilan balik EvtDeviceWdmIrpDispatch harus:
- Mengembalikan nilai yang dikembalikan metode WdfDeviceWdmDispatchIrp , jika fungsi panggilan balik memanggil metode tersebut.
- Mengembalikan nilai yang dikembalikan metode WdfDeviceWdmDispatchIrpToIoQueue , jika fungsi panggilan balik memanggil metode tersebut.
- KmDF saja 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.
- KmDF sajaAtur 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.
- KmDF sajaKembalikan STATUS_PENDING jika fungsi panggilan balik memanggil IoMarkIrpPending.
Keterangan
Fungsi panggilan balik EvtDeviceWdmIrpDispatch hanya boleh digunakan untuk memilih antrean tertentu untuk IRP. Untuk melakukannya, driver memanggil metode WdfDeviceWdmDispatchIrpToIoQueue dari dalam fungsi panggilan balik.
Jika, setelah memeriksa IRP dalam fungsi panggilan balik ini, driver tidak tahu cara mengirim IRP, driver dapat memanggil WdfDeviceWdmDispatchIrp untuk mengembalikan IRP ke kerangka kerja untuk penanganan default.
Driver UMDF harus memanggil WdfDeviceWdmDispatchIrp atau WdfDeviceWdmDispatchIrpToIoQueue dari fungsi panggilan balik ini. Driver KMDF memiliki opsi tambahan untuk memanggil keduanya, dan sebaliknya menyelesaikan IRP atau menandainya tertunda.
Untuk mendaftarkan fungsi panggilan balik EvtDeviceWdmIrpDispatch , driver Anda harus memanggil WdfDeviceConfigureWdmIrpDispatchCallback.
Dalam fungsi panggilan balik EvtDeviceWdmIrpDispatch , driver tidak boleh mengatur rutinitas penyelesaian. Jika rutinitas penyelesaian diperlukan, driver KMDF dapat menyediakan fungsi panggilan balik EvtDeviceWdmIrpPreprocess alih-alih EvtDeviceWdmIrpDispatch.
Untuk informasi selengkapnya tentang menentukan antrean runtime integrasi saat runtime integrasi tiba, lihat Mengirimkan IRP ke Antrean I/O.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Versi KMDF minimum | 1.11 |
Versi UMDF minimum | 2.17 |
Header | wdfdevice.h (termasuk Wdf.h) |
IRQL | <=DISPATCH_LEVEL |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk