Bagikan melalui


Memodifikasi Parameter untuk Operasi I/O

Driver minifilter dapat memodifikasi parameter untuk operasi I/O. Misalnya, rutinitas panggilan balik praoperasi driver minifilter dapat mengalihkan operasi I/O ke volume yang berbeda dengan mengubah instans target untuk operasi. Instans target baru harus merupakan instans driver minifilter yang sama pada ketinggian yang sama pada volume lain.

Parameter untuk operasi I/O ditemukan dalam struktur data panggilan balik (FLT_CALLBACK_DATA) dan struktur blok parameter I/O (FLT_IO_PARAMETER_BLOCK) untuk operasi. Rutinitas panggilan balik praoperasi driver minifilter dan rutinitas panggilan balik pascaoperasi menerima penunjuk ke struktur data panggilan balik untuk operasi dalam parameter Input data. Anggota Iopb dari struktur data panggilan balik adalah penunjuk ke struktur blok parameter I/O yang berisi parameter untuk operasi.

Jika rutinitas panggilan balik praoperasi driver minifilter memodifikasi parameter untuk operasi I/O, semua driver minifilter di bawah driver minifilter di tumpukan instans driver minifilter akan menerima parameter yang dimodifikasi dalam rutinitas panggilan balik praoperasi dan pascaoperasi mereka.

Parameter yang dimodifikasi tidak diterima oleh rutinitas panggilan balik pascaoperasi driver minifilter saat ini atau oleh driver minifilter di atas driver minifilter tersebut di tumpukan instans driver minifilter. Dalam semua situasi, rutinitas praoperasi dan panggilan balik pascaoperasi driver minifilter menerima nilai parameter input yang sama untuk operasi I/O tertentu.

Setelah memodifikasi parameter untuk operasi I/O, rutinitas panggilan balik praoperasi atau pascaoperasi harus menunjukkan bahwa parameter telah melakukannya dengan memanggil FltSetCallbackDataDirty, kecuali telah mengubah konten bidang IoStatus struktur data panggilan balik. Jika tidak, manajer filter akan mengabaikan perubahan apa pun pada nilai parameter. FltSetCallbackDataDirty mengatur bendera FLTFL_CALLBACK_DATA_DIRTY dalam struktur data panggilan balik untuk operasi I/O. Driver minifilter dapat menguji bendera ini dengan memanggil FltIsCallbackDataDirty atau menghapusnya dengan memanggil FltClearCallbackDataDirty.

Jika rutinitas panggilan balik praoperasi driver minifilter memodifikasi parameter untuk operasi I/O, semua driver minifilter di bawah driver minifilter di tumpukan instans driver minifilter akan menerima parameter yang dimodifikasi dalam parameter input Data dan FltObjects ke rutinitas panggilan balik praoperasi dan pascaoperasi mereka. (Driver minifilter tidak dapat langsung memodifikasi konten struktur FLT_RELATED_OBJECTS yang ditujukkan oleh parameter FltObjects . Namun, jika driver minifilter memodifikasi instans target atau objek file target untuk operasi I/O, manajer filter memodifikasi nilai anggota Instans atau FileObject yang sesuai dari struktur FLT_RELATED_OBJECTS yang diteruskan ke driver minifilter yang lebih rendah.)

Meskipun setiap perubahan parameter yang dilakukan rutinitas panggilan balik praoperasi driver minifilter tidak diterima oleh rutinitas panggilan balik pascaoperasi driver minifilter sendiri, rutinitas panggilan balik praoperasi dapat meneruskan informasi tentang parameter yang diubah ke rutinitas panggilan balik pascaoperasi driver minifilter sendiri. Jika rutinitas panggilan balik praoperasi melewati operasi I/O ke bawah tumpukan dengan mengembalikan FLT_PREOP_SUCCESS_WITH_CALLBACK atau FLT_PREOP_SYNCHRONIZE, ia dapat menyimpan informasi tentang nilai parameter yang diubah ke dalam struktur yang ditentukan driver minifilter yang diarahkan oleh parameter output CompletionContext . Manajer filter meneruskan penunjuk struktur ini dalam parameter input CompletionContext ke rutinitas panggilan balik pascaoperasi.

Untuk informasi selengkapnya tentang parameter untuk operasi I/O, lihat FLT_CALLBACK_DATA dan FLT_IO_PARAMETER_BLOCK.