Bagikan melalui


Mengirim Permintaan I/O ke Target I/O Umum di UMDF

Peringatan

UMDF 2 adalah versi terbaru UMDF dan pengganti UMDF 1. Semua driver UMDF baru harus ditulis menggunakan UMDF 2. Tidak ada fitur baru yang ditambahkan ke UMDF 1 dan ada dukungan terbatas untuk UMDF 1 pada versi Windows 10 yang lebih baru. Driver Universal Windows harus menggunakan UMDF 2.

Sampel UMDF 1 yang diarsipkan dapat ditemukan di Windows 11, versi 22H2 - Pembaruan Sampel Driver Mei 2022.

Untuk informasi selengkapnya, lihat Memulai UMDF.

Driver UMDF dapat mengirim permintaan I/O ke target I/O umum baik secara sinkron atau asinkron.

Jika driver mengirim permintaan I/O secara sinkron, utas driver mengirimkan permintaan satu per satu. Utas menunggu setiap permintaan selesai sebelum mengirim yang berikutnya. Proses ini lebih sederhana daripada mengirim permintaan I/O secara asinkron. Driver dapat mengirim permintaan I/O secara sinkron jika tidak mengirim banyak permintaan dan jika performa sistem atau perangkat tidak berkurang saat driver menunggu setiap permintaan I/O.

Jika driver mengirim permintaan I/O secara asinkron, utas driver mengirimkan setiap permintaan segera setelah permintaan siap dikirim, tanpa menunggu permintaan yang dikirim sebelumnya selesai. Jika driver harus menangani banyak permintaan I/O dalam waktu singkat, driver mungkin tidak dapat menunggu setiap permintaan selesai sebelum mengirim permintaan berikutnya. Jika tidak, driver mungkin kehilangan data atau performa perangkatnya dan, mungkin, dari seluruh sistem mungkin berkurang.

Sebelum driver UMDF dapat mengirim permintaan I/O ke target I/O, driver harus memformat permintaan. Tabel berikut mencantumkan metode yang dapat dipanggil driver untuk memformat permintaan I/O. Driver dapat menggunakan metode ini untuk memformat permintaan yang diterima driver dalam salah satu antrean I/O-nya atau driver yang dibuat.

Metode Tujuan

IWDFIoRequest::FormatUsingCurrentType

Memformat permintaan yang diterima driver dari kerangka kerja sehingga driver dapat mengirim permintaan, tidak dimodifikasi, ke target

IWDFIoTarget::FormatRequestForIoctl

Memformat permintaan kontrol perangkat

IWDFIoTarget::FormatRequestForRead

Memformat permintaan baca

IWDFIoTarget::FormatRequestForWrite

Memformat permintaan tulis

IWDFIoTarget2::FormatRequestForFlush

Memformat permintaan untuk membersihkan buffer.

IWDFIoTarget2::FormatRequestForQueryInformation

Memformat permintaan untuk mendapatkan informasi file.

IWDFIoTarget2::FormatRequestForSetInformation

Memformat permintaan untuk mengatur informasi file.

Untuk mengirim permintaan I/O ke target I/O, driver memanggil metode IWDFIoRequest::Send . Untuk mengirim permintaan I/O secara sinkron, driver meneruskan bendera WDF_REQUEST_SEND_OPTION_SYNCHRONOUS ke parameter Bendera . Jika tidak, driver mengirimkan permintaan I/O secara asinkron. Jika driver mengirim permintaan I/O secara asinkron, driver biasanya memerlukan pemberitahuan ketika driver lain menyelesaikan permintaan. Driver harus menentukan fungsi panggilan balik IRequestCallbackRequestCompletion::OnCompletion dan mendaftarkannya dengan memanggil metode IWDFIoRequest::SetCompletionCallback . Untuk informasi selengkapnya, lihat Menyelesaikan Permintaan I/O.

Driver yang memanggil IWDFIoRequest::Kirim untuk mengirim permintaan I/O dapat mencoba membatalkan permintaan nanti dengan memanggil metode IWDFIoRequest::CancelSentRequest . Jika driver membatalkan permintaan I/O yang diterima driver dari kerangka kerja, driver harus selalu menyelesaikan permintaan dengan memanggil metode IWDFIoRequest::Complete atau IWDFIoRequest::CompleteWithInformation dengan parameter CompletionStatus diatur ke STATUS_CANCELLED. Jika driver membuat objek permintaan, driver memanggil IWDFObject::D eleteWdfObject alih-alih menyelesaikan permintaan.