Fungsi WdfDeviceEnqueueRequest (wdfdevice.h)
[Hanya berlaku untuk KMDF]
Metode WdfDeviceEnqueueRequest mengirimkan permintaan I/O tertentu ke kerangka kerja, sehingga kerangka kerja kemudian dapat menambahkan permintaan ke salah satu antrean I/O yang telah dibuat driver untuk perangkat yang ditentukan.
Sintaks
NTSTATUS WdfDeviceEnqueueRequest(
[in] WDFDEVICE Device,
[in] WDFREQUEST Request
);
Parameter
[in] Device
Handel ke objek perangkat kerangka kerja.
[in] Request
Handel ke objek permintaan kerangka kerja.
Nilai kembali
Jika operasi berhasil, metode mengembalikan STATUS_SUCCESS. Nilai pengembalian tambahan meliputi:
Menampilkan kode | Deskripsi |
---|---|
|
Jumlah memori yang tersedia rendah. |
|
Driver belum membuat antrean I/O untuk perangkat, dan driver bukan driver filter. |
|
Antrean I/O perangkat tidak menerima permintaan. |
Metode ini mungkin mengembalikan nilai NTSTATUS lainnya.
Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.
Keterangan
Driver Anda hanya dapat memanggil WdfDeviceEnqueueRequest dari fungsi panggilan balik EvtIoInCallerContext .
Metode WdfDeviceEnqueueRequest menambahkan permintaan ke antrean I/O khusus jenis permintaan driver untuk perangkat, jika driver telah membuatnya. Jika tidak, metode menambahkan permintaan ke antrean default perangkat, jika driver telah membuatnya.
Jika driver belum membuat antrean I/O apa pun untuk perangkat, WdfDeviceEnqueueRequest melakukan hal berikut:
- Jika driver adalah driver filter, WdfDeviceEnqueueRequest mengirimkan permintaan ke target I/O driver.
- Jika driver bukan driver filter, WdfDeviceEnqueueRequest mengembalikan STATUS_INVALID_DEVICE_REQUEST.
Akibatnya, jika driver perlu menggunakan permintaan atau konteksnya setelah memanggil WdfDeviceEnqueueRequest, maka driver harus mengambil referensi pada permintaan sebelum memanggil WdfDeviceEnqueueRequest.
Untuk melakukannya, driver dapat memanggil WdfObjectReference sebelum dan kemudian WdfObjectDereference setelah panggilan ke WdfDeviceEnqueueRequest. Driver harus mendereferensikan permintaan sebelum keluar dari EvtIoInCallerContext.
Untuk informasi selengkapnya tentang metode WdfDeviceEnqueueRequest , lihat Mengelola Antrean I/O.
Untuk kmdf versi 1.0 dan 1.5, WdfDeviceEnqueueRequest harus dipanggil pada PASSIVE_LEVEL. Untuk versi 1.7 dan yang lebih baru, WdfDeviceEnqueueRequest dapat dipanggil di IRQL <= DISPATCH_LEVEL.
Contoh
Contoh kode berikut adalah fungsi panggilan balik EvtIoInCallerContext yang mencari permintaan yang berisi kode kontrol I/O kustom, IOCTL_NONPNP_METHOD_NEITHER. Jika kode kontrol I/O tidak ditemukan, fungsi panggilan balik hanya mengembalikan permintaan ke kerangka kerja. Jika fungsi panggilan balik menemukan kode kontrol I/O, fungsi tersebut melakukan praproses permintaan lalu mengembalikannya ke kerangka kerja. Jika terjadi kesalahan, fungsi panggilan balik menyelesaikan permintaan.
VOID
MyEvtDeviceIoInCallerContext(
IN WDFDEVICE Device,
IN WDFREQUEST Request
)
{
NTSTATUS status = STATUS_SUCCESS;
WDF_REQUEST_PARAMETERS params;
WDF_REQUEST_PARAMETERS_INIT(¶ms);
WdfRequestGetParameters(
Request,
¶ms
);
if(!(params.Type == WdfRequestTypeDeviceControl &&
params.Parameters.DeviceIoControl.IoControlCode == IOCTL_NONPNP_METHOD_NEITHER)) {
status = WdfDeviceEnqueueRequest(
Device,
Request
);
if(!NT_SUCCESS(status)) {
goto End;
}
return;
}
//
// Found a match for the control code. Preprocess the request, and then
// return the request to the framework.
//
//...(Preprocess the request here.)
status = WdfDeviceEnqueueRequest(
Device,
Request
);
if(!NT_SUCCESS(status)) {
goto End;
}
return;
End:
WdfRequestComplete(
Request,
status
);
return;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Versi KMDF minimum | 1,0 |
Header | wdfdevice.h (termasuk Wdf.h) |
Pustaka | Wdf01000.sys (lihat Penerapan Versi Pustaka Kerangka Kerja.) |
IRQL | <= DISPATCH_LEVEL (Lihat bagian keterangan) |
Aturan kepatuhan DDI | DeferredRequestCompleted(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestCompleted(kmdf), RequestCompletedLocal(kmdf) |
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