Bagikan melalui


Menulis Rutinitas Pengiriman IRP

Catatan

Untuk keandalan dan performa yang optimal, gunakan driver minifilter sistem file dengan dukungan Filter Manager alih-alih driver filter sistem file warisan. Untuk memindahkan driver warisan Anda ke driver minifilter, lihat Panduan untuk Porting Driver Filter Warisan.

Driver filter sistem file menggunakan rutinitas pengiriman yang mirip dengan yang digunakan dalam driver perangkat. Rutinitas pengiriman menangani satu atau beberapa jenis RUNP. ( Jenis IRP ditentukan oleh kode fungsi utamanya.) Rutinitas DriverEntry driver mendaftarkan pengiriman titik masuk rutin dengan menyimpannya di tabel pengiriman objek driver. Ketika IRP dikirim ke driver, subsistem I/O memanggil rutinitas pengiriman yang sesuai berdasarkan kode fungsi utama IRP.

Setiap rutinitas pengiriman IRP didefinisikan sebagai berikut:

NTSTATUS
(*PDRIVER_DISPATCH) (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

Rutinitas pengiriman driver filter sistem file paling sering disebut di IRQL PASSIVE_LEVEL, dalam konteks utas yang berasal dari permintaan I/O, yang biasanya merupakan utas aplikasi mode pengguna. Namun, ada beberapa pengecualian untuk aturan ini. Misalnya, kesalahan halaman menyebabkan rutinitas pengiriman baca dan tulis dipanggil di IRQL APC_LEVEL. Pengecualian ini dirangkum dalam tabel di Dispatch Routine IRQL dan Thread Context. Sayangnya, saat ini tidak mungkin untuk mencegah driver dalam rantai filter memanggil IoCallDriver di IRQL > PASSIVE_LEVEL (misalnya, dengan gagal melepaskan spinlock atau mutex cepat). Namun demikian, sangat disarankan agar filter mengirimkan rutinitas selalu memanggil IoCallDriver di IRQL yang sama di mana mereka dipanggil.

Rutinitas pengiriman dapat dibuat dapat dipaginasi, asalkan memenuhi kriteria yang dijelaskan di bagian Membuat Driver Dapat Di-Pageable dari Panduan Desain Arsitektur Driver Kernel-Mode.

Jika driver filter sistem file memiliki objek perangkat kontrol (CDO), rutinitas pengirimannya harus dapat mendeteksi dan menangani kasus di mana objek perangkat target IRP adalah CDO daripada objek perangkat volume (VDO) untuk volume yang dipasang. Untuk informasi selengkapnya tentang CDO, lihat Objek Perangkat Kontrol Driver Filter.

Bagian ini membahas topik berikut:

Menyelesaikan IRP

Meneruskan IRP Ke Driver Lower-Level

Mengembalikan Status dari Rutinitas Pengiriman

Contoh: Meneruskan IRP Ke Bawah Tanpa Mengatur Rutinitas Penyelesaian

Batasan pada Rutinitas Pengiriman

Pengiriman Rutin IRQL dan Konteks Utas