Fungsi WdfIoQueuePurge (wdfio.h)
[Berlaku untuk KMDF dan UMDF]
Metode WdfIoQueuePurge menyebabkan kerangka kerja berhenti mengantre permintaan I/O ke antrean I/O dan membatalkan permintaan yang tidak diolah.
Sintaks
void WdfIoQueuePurge(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE PurgeComplete,
[in, optional] WDFCONTEXT Context
);
Parameter
[in] Queue
Handel ke objek antrean kerangka kerja.
[in, optional] PurgeComplete
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 WdfIoQueuePurge, kerangka kerja berhenti menambahkan permintaan I/O ke antrean yang ditentukan. Kerangka kerja membatalkan semua permintaan yang belum dikirimkan ke perangkat target dan memanggil fungsi panggilan balik CompletionRoutine driver untuk masing-masing. Kerangka kerja juga mencoba membatalkan (dengan memanggil IoCancelIrp) setiap permintaan yang dikirimkan ke perangkat target yang tidak ditandai WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE.
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.
Setelah driver menghapus antrean I/O, driver dapat memulai ulang antrean dengan memanggil WdfIoQueueStart.
Jika driver memanggil WdfRequestRequeue setelah memanggil WdfIoQueuePurge, upaya antrean ulang dapat berhasil sebelum pembersihan selesai. Dalam versi 1.9 dan yang lebih lama dari KMDF, urutan ini menyebabkan sistem operasi mengalami crash. Masalah ini diperbaiki di KMDF versi 1.11 dan yang lebih baru.
Untuk informasi selengkapnya tentang metode WdfIoQueuePurge , lihat Mengelola Antrean I/O.
Contoh
Contoh kode berikut menghapus menyeluruh antrean I/O dan tidak memanggil fungsi panggilan balik ketika semua permintaan yang dikirimkan ke driver telah selesai atau dibatalkan.
WdfIoQueuePurge(
ReadQueue,
WDF_NO_EVENT_CALLBACK,
WDF_NO_CONTEXT
);
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) |