Bagikan melalui


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)

Lihat juga

EvtIoQueueState

WdfIoQueueDrain

WdfIoQueuePurgeSynchronously