Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sistem operasi mengirimkan semua permintaan I/O pada perangkat ke driver kelas. Driver kelas pada gilirannya meminta informasi khusus perangkat keras dari minidriver dengan meneruskan SRB ke minidriver. Driver kelas menentukan operasi yang dimintanya di anggota Perintah dari blok permintaan aliran.
Baik minidriver secara keseluruhan maupun setiap aliran dalam minidriver mungkin menerima permintaan I/O. Minidriver harus menyediakan rutinitas StrMiniReceiveDevicePacket untuk menangani permintaan di seluruh perangkat. Setiap aliran harus mendukung dua rutinitas untuk menangani permintaan I/O: satu untuk permintaan data, dan satu untuk permintaan kontrol. Driver kelas memanggil panggilan balik permintaan data, StrMiniReceiveStreamDataPacket, untuk menangani semua permintaan baca dan tulis pada aliran. Semua permintaan lain untuk aliran diteruskan ke StrMiniReceiveStreamControlPacket.
Jika driver kelas menangani sinkronisasi untuk minidriver, driver tersebut mengantre permintaan streaming, dan mengirimkannya ke minidriver satu per satu. Driver kelas mempertahankan tiga antrean terpisah -- satu untuk permintaan perangkat, dan masing-masing satu untuk aliran data dan permintaan kontrol. Minidriver mungkin memberi sinyal bahwa ia siap untuk permintaan baru dari salah satu antrean ini sebagai berikut:
| Jenis permintaan | Rutin | Parameter NotificationType dari Rutinitas |
|---|---|---|
permintaan perangkat |
SiapUntukPermintaanPerangkatBerikutnya |
|
permintaan kontrol aliran |
SiapUntukPermintaanKontrolAliranBerikutnya |
|
permintaan data aliran |
SiapUntukPermintaanDataAliranBerikutnya |
Ketika driver kelas memanggil StrMiniReceiveXXXPacket, ia menyerahkan blok permintaan aliran kepada minidriver. Rutinitas minidriver memiliki akses tunggal ke blok permintaan aliran sampai memberi sinyal ke driver kelas yang telah menyelesaikan permintaan.
Ketika minidriver selesai memproses permintaan, itu harus memberi sinyal driver kelas itu telah menyelesaikan permintaan sebagai berikut:
Minidriver harus mengatur status permintaan di bidang Status blok permintaan aliran.
Minidriver harus memberi sinyal bahwa ia telah menyelesaikan permintaan, dengan memanggil StreamClassDeviceNotification atau StreamClassStreamNotification. Untuk menyelesaikan permintaan perangkat, minidriver memanggil StreamClassDeviceNotification dengan parameter NotificationType DeviceRequestComplete. Untuk menyelesaikan permintaan streaming, minidriver memanggil StreamClassStreamNotification dengan parameter NotificationType streamRequestComplete.
Jika driver kelas menangani sinkronisasi, dan jika minidriver belum memberi sinyal driver kelas bahwa ia siap untuk permintaan lain pada antrean ini, minidriver harus melakukannya sekarang.
Minidriver dapat menggabungkan 2 dan 3 dengan memanggil StreamClassCompleteRequestAndMarkQueueReady.
Minidriver memproses permintaan secara asinkron, sehingga driver kelas mungkin perlu membatalkan atau menghentikan permintaan tersebut karena batas waktu. Untuk tujuan ini, minidriver harus menyediakan StrMiniCancelPacket dan rutinitas StrMiniRequestTimeout . Driver kelas memanggil rutinitas minidriver masing-masing ketika membatalkan atau memperlambat permintaan.
Driver kelas membatalkan permintaan ketika permintaan I/O yang mendasar dibatalkan oleh sistem operasi. Driver kelas menghentikan permintaan yang memakan waktu terlalu lama untuk diproses -- mengurangi penghitung jumlah detik hingga permintaan tersebut kedaluwarsa di anggota TimeoutCounter dari blok permintaan aliran. Jika minidriver harus menunda pemrosesan terhadap permintaan untuk jangka waktu yang lama, itu harus mengatur anggota TimeoutCounter ke nol -- driver kelas kemudian tidak akan membatalkan permintaan. Setelah minidriver melanjutkan pemrosesan permintaan, itu harus mengatur ulang TimeoutCounter agar sama dengan anggota TimeoutOriginal dari blok permintaan aliran. Minidriver dapat mengatur ulang TimeoutOriginal untuk mengubah lamanya waktu sebelum waktu permintaan habis. Lihat HW_STREAM_REQUEST_BLOCK untuk detailnya.