Bagikan melalui


Aliran File, Konteks Aliran, dan Konteks Per-Stream

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.

Aliran file adalah urutan byte yang digunakan untuk menyimpan data file. Biasanya file hanya memiliki satu aliran file, yaitu aliran data default file. Namun, pada sistem file yang mendukung beberapa aliran data, setiap file dapat memiliki beberapa aliran file. Salah satu aliran ini adalah aliran data default, yang tidak disebutkan namanya. Yang lain diberi nama aliran data alternatif. Saat membuka file, Anda benar-benar membuka aliran file yang diberikan.

Ketika sistem file membuka aliran file untuk pertama kalinya, sistem file membuat struktur konteks aliran khusus sistem file, seperti blok kontrol file (FCB) atau blok kontrol aliran (SCB), dan menyimpan alamat struktur ini di anggota FsContext dari objek file yang dihasilkan.

Untuk sistem file lokal, jika aliran file yang sudah dibuka dibuka lagi (misalnya untuk akses baca bersama), subsistem I/O membuat objek file lain, tetapi sistem file tidak membuat konteks aliran baru. Kedua objek file menerima alamat struktur konteks aliran yang sama. Dengan demikian, untuk sistem file lokal, penunjuk konteks aliran secara unik mengidentifikasi aliran file.

Untuk sistem file jaringan yang mendukung konteks per aliran, perilakunya sama dengan sistem file lokal jika aliran file yang sudah dibuka dibuka lagi menggunakan nama berbagi jaringan atau alamat IP yang sama. Subsistem I/O membuat objek file baru, tetapi sistem file tidak membuat konteks aliran baru. Sebaliknya, ia menetapkan nilai penunjuk FsContext yang sama ke kedua objek file. Namun, jika aliran file dibuka menggunakan jalur yang berbeda (misalnya, nama berbagi yang berbeda, atau alamat IP untuk file yang sebelumnya dibuka menggunakan nama berbagi), sistem file memang membuat konteks aliran baru. Dengan demikian, untuk sistem file jaringan yang mendukung konteks per aliran, penunjuk FsContext tidak mengidentifikasi aliran file secara unik.

Konteks per aliran adalah struktur yang ditentukan filter yang berisi struktur FSRTL_PER_STREAM_CONTEXT sebagai salah satu anggotanya. Driver filter menggunakan struktur ini untuk melacak informasi tentang setiap aliran file yang dibuka sistem file.

Dukungan Sistem File untuk Konteks Per-Stream

Pada Windows XP dan yang lebih baru, sistem file yang mendukung konteks per aliran harus menggunakan struktur konteks aliran yang berisi struktur FSRTL_ADVANCED_FCB_HEADER .

Sistem file memiliki daftar global konteks per aliran yang terkait dengan aliran file tertentu. Saat sistem file membuat konteks aliran baru (FSRTL_ADVANCED_FCB_HEADER objek) untuk aliran file, sistem file memanggil FsRtlSetupAdvancedHeader untuk menginisialisasi daftar ini. Saat driver filter sistem file warisan memanggil FsRtlInsertPerStreamContext, konteks per aliran yang dibuat oleh filter ditambahkan ke daftar global.

Ketika sistem file menghapus konteks alirannya untuk aliran file, sistem ini memanggil FsRtlTeardownPerStreamContexts untuk membebaskan semua konteks per aliran yang telah dikaitkan dengan aliran file. Rutinitas ini memanggil rutinitas FreeCallback untuk setiap konteks per aliran dalam daftar global. Rutinitas FreeCallback harus mengasumsikan bahwa objek file untuk aliran file telah dibebaskan.

Untuk mengkueri apakah sistem file mendukung konteks per aliran untuk aliran file yang diwakili oleh objek file tertentu, panggil FsRtlSupportsPerStreamContexts pada objek file. Sistem file mungkin mendukung konteks per aliran untuk beberapa jenis file tetapi tidak untuk yang lain. Misalnya, NTFS dan FAT saat ini tidak mendukung konteks per aliran untuk file paging. Jadi jika FsRtlSupportsPerStreamContexts mengembalikan TRUE untuk satu aliran file, ini tidak menyiratkan bahwa FsRtlSupportsPerStreamContexts mengembalikan TRUE untuk satu aliran file.