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.
Gambar berikut menggambarkan bagaimana manajer I/O menyiapkan permintaan IRP_MJ_READ untuk operasi transfer DMA yang menggunakan I/O langsung.
Gambar sebelumnya menggambarkan bagaimana driver dapat menggunakan MdlAddress IRP untuk mentransfer data untuk permintaan baca. Pengandar dalam gambar menggunakan sistem berbasis paket atau DMA bus-master, dan telah melakukan operasi OR pada Flags objek perangkat dengan DO_DIRECT_IO.
Beberapa rentang alamat virtual ruang pengguna mewakili buffer utas saat ini, dan konten buffer tersebut mungkin benar-benar disimpan di beberapa jumlah halaman yang tidak mencolok secara fisik (bayangan gelap pada gambar sebelumnya). Manajer I/O membuat MDL untuk menjelaskan buffer ini. MDL adalah struktur data buram, yang ditentukan oleh manajer memori, yang memetakan rentang alamat virtual tertentu ke satu atau beberapa rentang alamat fisik berbasis halaman. Untuk informasi selengkapnya, lihat Menggunakan MDL.
Manajer I/O mengurus permintaan baca thread saat ini, di mana thread tersebut melewati berbagai alamat virtual ruang pengguna yang mewakili buffer.
Manajer I/O atau driver sistem file (FSD) memeriksa buffer yang disediakan pengguna untuk aksesibilitas dan memanggil MmProbeAndLockPages dengan MDL yang dibuat sebelumnya. MmProbeAndLockPages juga mengisi rentang alamat fisik yang sesuai di MDL.
Seperti yang ditunjukkan oleh gambar sebelumnya, MDL untuk rentang virtual dapat memiliki beberapa entri alamat fisik berbasis halaman yang sesuai, dan rentang virtual untuk buffer mungkin dimulai dan berakhir pada beberapa byte offset dari awal halaman pertama dan terakhir yang dijelaskan oleh MDL.
Manajer I/O menyediakan pointer ke MDL (MdlAddress) dalam IRP yang meminta operasi transfer. Hingga manajer I/O atau sistem file memanggil MmUnlockPages setelah driver menyelesaikan IRP, halaman fisik yang dijelaskan dalam MDL tetap terkunci dan ditetapkan ke buffer. Namun, alamat virtual dalam MDL seperti itu dapat menjadi tidak terlihat (dan tidak valid), bahkan sebelum IRP dikirim ke driver perangkat atau ke driver perantara yang mungkin berlapis di atas driver perangkat.
Jika driver menggunakan sistem berbasis paket atau DMA master bus, rutinitas AdapterControl-nya memanggil MmGetMdlVirtualAddress dengan penunjuk MdlAddress IRP untuk mendapatkan alamat virtual dasar untuk entri berbasis halaman MDL.
Rutinitas AdapterControl kemudian memanggil MapTransfer dengan alamat dasar yang dikembalikan oleh MmGetMdlVirtualAddress, untuk membaca data dari perangkat langsung ke memori fisik. (Untuk informasi selengkapnya, lihat Objek Adapter dan DMA.)
Driver harus selalu memeriksa panjang buffer. Perhatikan bahwa manajer I/O tidak membuat MDL untuk buffer panjang nol.