Fungsi WdfIoQueueDrainSynchronously (wdfio.h)
[Berlaku untuk KMDF dan UMDF]
Metode WdfIoQueueDrainSynchronously menyebabkan kerangka kerja berhenti mengantre permintaan I/O ke antrean I/O, sambil memungkinkan permintaan yang sudah diantrekan dikirim dan diproses. Metode ini kembali setelah semua permintaan selesai atau dibatalkan.
Sintaks
void WdfIoQueueDrainSynchronously(
[in] WDFQUEUE Queue
);
Parameter
[in] Queue
Handel ke objek antrean kerangka kerja.
Nilai kembali
Tidak ada
Keterangan
Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.
Setelah driver memanggil WdfIoQueueDrainSynchronously, kerangka kerja berhenti menambahkan permintaan I/O ke antrean yang ditentukan. Jika kerangka kerja menerima permintaan tambahan untuk antrean, kerangka kerja menyelesaikannya dengan nilai status penyelesaian STATUS_INVALID_DEVICE_STATE.
Driver tidak boleh memanggil metode lain yang mengubah status antrean, seperti WdfIoQueuePurge atau WdfIoQueueStart, sebelum panggilan ke WdfIoQueueDrainSynchronously telah kembali.
Sebagai praktik terbaik, Anda hanya boleh memanggil WdfIoQueueDrainSynchronously ketika Anda yakin bahwa permintaan I/O antrean yang tertunda akan selesai tepat waktu. Jika tidak, gunakan WdfIoQueuePurgeSynchronously. Untuk informasi selengkapnya, lihat Mengelola Antrean I/O.
Setelah driver mengosongkan antrean I/O, driver dapat memulai ulang antrean dengan memanggil WdfIoQueueStart.
Jangan panggil WdfIoQueueDrainSynchronously dari fungsi panggilan balik peristiwa objek antrean berikut, terlepas dari antrean yang dikaitkan dengan fungsi panggilan balik peristiwa:
EvtIoDefaultEvtIoDeviceControlEvtIoInternalDeviceControlEvtIoReadEvtIoWrite
Contoh
Contoh kode berikut menguras antrean I/O.
WdfIoQueueDrainSynchronously(queue);
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Versi KMDF minimum | 1,0 |
Versi UMDF minimum | 2.0 |
Header | wdfio.h (termasuk Wdf.h) |
Pustaka | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Aturan kepatuhan DDI | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |