EVT_WDF_USB_READER_COMPLETION_ROUTINE fungsi panggilan balik (wdfusb.h)
[Berlaku untuk KMDF dan UMDF]
Fungsi panggilan balik peristiwa EvtUsbTargetPipeReadComplete driver memberi tahu driver bahwa pembaca berkelanjutan telah berhasil menyelesaikan permintaan baca.
Sintaks
EVT_WDF_USB_READER_COMPLETION_ROUTINE EvtWdfUsbReaderCompletionRoutine;
void EvtWdfUsbReaderCompletionRoutine(
[in] WDFUSBPIPE Pipe,
[in] WDFMEMORY Buffer,
[in] size_t NumBytesTransferred,
[in] WDFCONTEXT Context
)
{...}
Parameter
[in] Pipe
Handel ke objek pipa kerangka kerja.
[in] Buffer
Handel ke objek memori kerangka kerja yang mewakili buffer yang berisi data dari perangkat.
[in] NumBytesTransferred
Jumlah byte data yang ada di buffer baca.
[in] Context
Informasi konteks yang ditentukan driver yang ditentukan driver dalam anggota EvtUsbTargetPipeReadCompleteContext dari struktur WDF_USB_CONTINUOUS_READER_CONFIG pipa.
Nilai kembali
Tidak ada
Keterangan
Untuk mendaftarkan fungsi panggilan balik EvtUsbTargetPipeReadComplete , driver harus menempatkan alamat fungsi dalam struktur WDF_USB_CONTINUOUS_READER_CONFIG .
Jika driver telah membuat pembaca berkelanjutan untuk pipa USB, kerangka kerja memanggil fungsi panggilan balik EvtUsbTargetPipeReadComplete driver setiap kali target I/O driver berhasil menyelesaikan permintaan baca. Fungsi panggilan balik dipanggil pada IRQL di mana target I/O menyelesaikan permintaan baca, yang biasanya IRQL = DISPATCH_LEVEL, tetapi tidak lebih tinggi dari DISPATCH_LEVEL. (Jika target I/O tidak berhasil menyelesaikan permintaan, kerangka kerja memanggil fungsi panggilan balik EvtUsbTargetPipeReadersFailed driver.)
Untuk mengakses buffer yang berisi data yang dibaca dari perangkat, driver dapat memanggil WdfMemoryGetBuffer. Kerangka kerja menulis data ke dalam buffer, setelah header yang ditentukan oleh anggota HeaderLength dari struktur WDF_USB_CONTINUOUS_READER_CONFIG . Perhatikan bahwa pointer yang dikembalikan WdfMemoryGetBuffer menunjuk ke awal header, tetapi parameter NumBytesTransferred fungsi callback EvtUsbTargetPipeReadCompletetidak menyertakan panjang header.
Secara default, kerangka kerja menghapus objek memori buffer setelah fungsi panggilan balik EvtUsbTargetPipeReadComplete kembali. Namun, Anda mungkin ingin objek memori tetap valid setelah fungsi panggilan balik kembali. Misalnya, Anda mungkin ingin driver menyimpan handel objek di ruang konteks objek pipa kerangka kerja sehingga driver dapat memproses konten objek memori setelah fungsi panggilan balik kembali. Untuk memperpanjang masa pakai objek memori, fungsi panggilan balik harus meneruskan handel objek memori ke WdfObjectReference. Selanjutnya, driver harus memanggil WdfObjectDereference sehingga kerangka kerja dapat menghapus objek.
Kerangka kerja menyinkronkan panggilan ke fungsi panggilan balik EvtUsbTargetPipeReadComplete dan EvtUsbTargetPipeReadersFailed sesuai dengan aturan berikut:
- Fungsi panggilan balik ini tidak berjalan secara bersamaan untuk pipa USB individual.
- Jika driver membuat beberapa pembaca berkelanjutan untuk beberapa pipa USB, dengan beberapa fungsi panggilan balik EvtUsbTargetPipeReadComplete dan EvtUsbTargetPipeReadersFailed , beberapa fungsi panggilan balik dapat berjalan secara bersamaan.
- Jika driver telah menentukan nilai NumPendingReads default atau nilai yang lebih besar dari 1, dan jika permintaan baca selesai saat fungsi panggilan balik EvtUsbTargetPipeReadComplete dijalankan, kerangka kerja dapat memanggil fungsi panggilan balik EvtUsbTargetPipeReadComplete lagi sebelum fungsi panggilan balik kembali kembali.
- Kerangka kerja tidak menyinkronkan fungsi panggilan balik ini dengan fungsi panggilan balik lainnya.
Driver harus memanggil WdfObjectDereference ketika telah selesai menggunakan objek memori. Kerangka kerja kemudian dapat memanggil fungsi panggilan balik EvtDestroyCallback driver (jika disediakan) dan menghapus objek memori.
Untuk informasi selengkapnya tentang fungsi panggilan balik EvtUsbTargetPipeReadComplete dan target I/O USB, lihat Target I/O USB.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Versi KMDF minimum | 1,0 |
Versi UMDF minimum | 2.0 |
Header | wdfusb.h (termasuk Wdf.h) |
IRQL | <=DISPATCH_LEVEL (Lihat bagian Keterangan.) |