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.
Setiap driver perangkat tingkat bawah yang mengatur objek perangkatnya untuk I/O langsung memenuhi permintaan baca dengan mengembalikan data yang ditransfer dari perangkatnya ke memori fisik sistem, yang dijelaskan oleh MDL di Irp-MdlAddress>. Ini memenuhi permintaan tulis dengan mentransfer data dari memori fisik sistem ke perangkatnya.
Driver tingkat bawah harus menangani permintaan baca/tulis secara asinkron. Oleh karena itu, setiap rutinitas DispatchReadWrite driver tingkat bawah harus meneruskan IRP_MJ_READ dan IRP_MJ_WRITE IRPs dengan parameter yang valid ke rutinitas driver lain, seperti yang dijelaskan dalam Meneruskan IRP ke Bawah Driver Stack.
Untuk IRP baca/tulis yang dikirim ke driver tingkat bawah, memori fisik halaman yang dijelaskan oleh MDL di Irp-MdlAddress> telah diperiksa untuk memastikan hak akses yang tepat dalam melakukan transfer yang diminta dan telah dikunci oleh driver tingkat tertinggi dalam rantai driver atau oleh pengelola I/O. Setiap driver tingkat menengah atau terendah yang mengatur objek perangkatnya untuk I/O langsung tidak boleh memanggil MmProbeAndLockPages karena ini telah dilakukan. Driver tingkat terendah memanggil MmGetSystemAddressForMdlSafe. (Driver untuk Windows 98 memanggil MmGetSystemAddressForMdl sebagai gantinya. Driver untuk Windows Me, Windows 2000 dan versi Windows yang lebih baru harus menggunakan MmGetSystemAddressForMdlSafe.)
Setiap rutin DispatchReadWrite pada driver perangkat yang berada pada tingkat menengah atau terendah harus memvalidasi parameter di lokasi tumpukan I/O dari IRP baca/tulis jika tidak dapat mempercayai bahwa driver tingkat lebih tinggi hanya akan meneruskan IRP dengan parameter yang valid. Jika rutinitas DispatchReadWrite menemukan kesalahan parameter, maka harus menyelesaikan IRP dengan nilai kesalahan STATUS_XXX yang sesuai seperti yang telah dijelaskan dalam Penyelesaian IRP. Jika parameter valid, rutinitas DispatchReadWrite driver perantara harus meneruskan permintaan untuk pemrosesan lebih lanjut, sesuai dengan pedoman di DispatchReadWrite di driver Higher-Level.
Rutinitas DispatchReadWrite driver perangkat tingkat terendah harus memanggil IoMarkIrpPending dengan permintaan transfer, meneruskan IRP untuk diproses lebih lanjut oleh rutinitas driver lain, dan mengembalikan STATUS_PENDING, seperti yang dijelaskan dalam Passing IRP ke bawah Driver Stack.
Perhatikan bahwa prosedur DispatchReadWrite driver perangkat dapat mengontrol urutan IRP diantrekan ke perangkatnya untuk meningkatkan throughput I/O dengan memanggil IoStartPacket menggunakan nilai Key yang ditentukan oleh driver. Rutinitas lain dalam driver menghapus antrean IRP nanti, menentukan apakah panjang yang diminta harus dibagi menjadi operasi transfer parsial, dan memprogram perangkat untuk mentransfer data.
Secara umum, driver perangkat yang harus membagi permintaan transfer besar agar sesuai dengan batasan perangkatnya harus menunda operasi ini sampai tepat sebelum menyiapkan perangkat untuk permintaan transfer tertentu. Rutinitas DispatchReadWrite dari driver perangkat semacam itu seharusnya tidak memeriksa lokasi tumpukan I/O IRP masuk untuk batasan transfer spesifik perangkat, atau mencoba menghitung rentang transfer parsial, karena driver dapat menunda pemeriksaan ini sampai tepat sebelum StartIo (atau rutinitas driver lainnya) menyetel perangkat untuk operasi transfer.