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.
Kecuali untuk driver sistem file, driver tingkat yang lebih tinggi biasanya tidak memiliki antrean driver internal untuk IRP. Rutinitas DispatchReadWrite driver seperti itu dapat meneruskan IRP dengan parameter yang valid ke driver di bawahnya, dengan kemungkinan menyiapkan rutinitas IoCompletion-nya, seperti yang dijelaskan dalam Meneruskan IRP ke Bawah Stack Driver.
Namun, rutinitas DispatchReadWrite driver kelas SCSI bertanggung jawab untuk memisahkan permintaan transfer besar, jika perlu, sebelum mengirim IRP dengan kode fungsi utama IRP_MJ_READ atau IRP_MJ_WRITE ke pasangan driver port SCSI/miniport. Untuk informasi selengkapnya, lihat Rutinitas SplitTransferRequest Driver Kelas Penyimpanan.
Jika driver tingkat tinggi mengalokasikan satu atau beberapa IRP, yang disiapkannya untuk driver tingkat lebih rendah berikutnya di dalam rutinitas DispatchReadWrite-nya, untuk meminta sejumlah transfer parsial, rutinitas DispatchReadWrite harus memanggil IoSetCompletionRoutine dengan setiap IRP yang dialokasikan driver. Driver harus mendaftarkan rutinitas IoCompletion-nya untuk melacak berapa banyak data yang ditransfer dalam setiap operasi transfer parsial sehingga rutinitas IoCompletion dapat melepaskan semua IRP yang dialokasikan oleh driver dan pada akhirnya menyelesaikan permintaan asli.
Jika driver dasar mengontrol perangkat media yang dapat dilepas, IRP apa pun yang dialokasikan oleh driver tingkat lebih tinggi harus memiliki konteks utas. Untuk mengatur konteks utas, driver yang mengalokasikan harus mengatur Irp-Tail.Overlay.Thread di setiap IRP yang baru dialokasikan dengan menggunakan nilai yang sama dari IRP transfer masuk. Untuk informasi selengkapnya, lihat Mendukung Removable Media.
Jika driver perangkat yang mendasar mengembalikan IRP untuk transfer parsial dengan kesalahan, rutinitas IoCompletion dapat mencoba kembali permintaan transfer parsial atau menyelesaikan IRP asli dengan mengatur blok status I/O menggunakan kesalahan yang dikembalikan, setelah membebaskan IRP dan memori yang telah dialokasikan oleh driver tingkat yang lebih tinggi.
Jika rutinitas DispatchReadWrite dari driver tingkat lebih tinggi mengalokasikan memori untuk operasi transfer parsial dan alokasi tersebut akan diakses oleh rutinitas IoCompletion dari driver (atau oleh driver perangkat yang mendasarinya), maka rutinitas DispatchReadWrite harus mengalokasikan memori tersebut dari kumpulan non-halaman (nonpaged pool).