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

EvtIoQueueState

WdfIoQueueDrainSynchronously

WdfIoQueuePurge