Fungsi WdfIoQueueDrain (wdfio.h)
[Berlaku untuk KMDF dan UMDF]
Metode WdfIoQueueDrain menyebabkan kerangka kerja berhenti mengantre permintaan I/O ke antrean I/O, sambil memungkinkan permintaan yang sudah diantrekan dikirim dan diproses.
Sintaks
void WdfIoQueueDrain(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE DrainComplete,
[in, optional] WDFCONTEXT Context
);
Parameter
[in] Queue
Handel ke objek antrean kerangka kerja.
[in, optional] DrainComplete
Penunjuk ke fungsi panggilan balik EvtIoQueueState yang disediakan driver. Parameter ini bersifat opsional dan dapat berupa NULL.
[in, optional] Context
Penunjuk yang tidak dity ke informasi konteks yang disediakan driver yang diteruskan kerangka kerja ke fungsi panggilan balik EvtIoQueueState . Parameter ini bersifat opsional dan dapat berupa NULL.
Nilai kembali
Tidak ada
Keterangan
Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.
Setelah driver memanggil WdfIoQueueDrain, 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.
Jika driver menyediakan fungsi panggilan balik EvtIoQueueState , kerangka kerja memanggilnya setelah semua permintaan yang dikirimkan ke driver telah selesai atau dibatalkan. Anda dapat memodifikasi IRQL tempat panggilan balik berjalan dengan menentukan ExecutionLevel di WDF_OBJECT_ATTRIBUTES pada waktu pembuatan antrean. Untuk informasi selengkapnya, lihat bagian Keterangandi EVT_WDF_IO_QUEUE_STATE.
Driver tidak boleh memanggil metode lain yang mengubah status antrean, seperti WdfIoQueuePurge atau WdfIoQueueStart, sebelum kerangka kerja disebut EvtIoQueueState.
Jika driver menentukan NULL untuk DrainComplete, driver dapat memanggil operasi perubahan status lain sebelum permintaan selesai.
Sebagai praktik terbaik, Anda hanya boleh memanggil WdfIoQueueDrain ketika Anda yakin bahwa permintaan I/O antrean yang tertunda akan selesai tepat waktu. Jika tidak, gunakan WdfIoQueuePurge. Untuk informasi selengkapnya, lihat Mengelola Antrean I/O.
Setelah driver menguras antrean I/O, driver dapat memulai ulang antrean dengan memanggil WdfIoQueueStart.
Contoh
Contoh kode berikut menguras antrean I/O dan memanggil fungsi EvtIoQueueDrainComplete driver ketika semua permintaan yang dikirimkan ke driver telah selesai atau dibatalkan.
WdfIoQueueDrain(
Queue,
EvtIoQueueDrainComplete,
(WDFCONTEXT) myQueueContext
);
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 | <= DISPATCH_LEVEL |
Aturan kepatuhan DDI | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(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