struktur FSRTL_ADVANCED_FCB_HEADER (ntifs.h)
Struktur FSRTL_ADVANCED_FCB_HEADER berisi informasi konteks yang dikelola sistem file tentang file.
Sintaks
typedef struct _FSRTL_ADVANCED_FCB_HEADER {
FSRTL_COMMON_FCB_HEADER DUMMYSTRUCTNAME;
PFAST_MUTEX FastMutex;
LIST_ENTRY FilterContexts;
EX_PUSH_LOCK PushLock;
PVOID *FileContextSupportPointer;
union {
OPLOCK Oplock;
PVOID ReservedForRemote;
};
PVOID AePushLock;
PVOID ReservedContextLegacy;
ULONG BypassIoOpenCount;
struct _FSRTL_PER_STREAM_CONTEXT *ReservedContext;
} FSRTL_ADVANCED_FCB_HEADER;
Anggota
DUMMYSTRUCTNAME
Anggota yang tidak disebutkan namanya yang berisi struktur jenis FSRTL_COMMON_FCB_HEADER.
FastMutex
Penunjuk ke mutex cepat yang diinisialisasi yang digunakan untuk menyinkronkan akses ke anggota DUMMYSTRUCTNAME berikut:
- Ukuran Alokasi
- FileSize
- ValidDataLength
Jika ada, anggota PushLock digunakan untuk menyinkronkan akses ke anggota FilterContexts ; jika tidak, FastMutex digunakan.
FilterContexts
Penunjuk ke kepala daftar semua struktur konteks yang terkait dengan file. Driver filter dapat mencari daftar ini dengan memanggil FsRtlLookupPerStreamContext dan memodifikasinya dengan memanggil FsRtlInsertPerStreamContext dan FsRtlRemovePerStreamContext.
PushLock
Kunci push yang digunakan untuk menyinkronkan akses ke daftar FilterContexts . Bidang ini hanya tersedia dimulai dengan Windows Vista (yaitu, jika versi bit-field dari struktur FSRTL_COMMON_FCB_HEADER lebih besar dari atau sama dengan FSRTL_FCB_HEADER_V1).
FileContextSupportPointer
Penunjuk ke bidang penunjuk yang digunakan oleh pustaka runtime sistem file (FSRTL) untuk melacak konteks file. Jika bukan NULL, anggota ini harus menjadi penunjuk ke variabel PVOID di dalam struktur per file untuk sistem file yang membuat struktur. Jika NULL, konteks file tidak didukung. Anggota ini hanya tersedia dimulai dengan Windows Vista (yaitu, jika versi bit-field dari struktur FSRTL_COMMON_FCB_HEADER lebih besar dari atau sama dengan FSRTL_FCB_HEADER_V1).
Oplock
Oplock untuk file atau direktori. Bidang ini hanya tersedia dimulai dengan Windows 8 (yaitu, jika Bidang bit versi dari struktur FSRTL_COMMON_FCB_HEADER lebih besar dari atau sama dengan FSRTL_FCB_HEADER_V2).
ReservedForRemote
Jika sistem file berjarak jauh, bidang ini dicadangkan. Ini hanya tersedia dimulai dengan Windows 8 (yaitu, jika versi bit-field dari struktur FSRTL_COMMON_FCB_HEADER lebih besar dari atau sama dengan FSRTL_FCB_HEADER_V2).
AePushLock
Kunci pendorongan perluasan otomatis yang digunakan alih-alih PushLock untuk menyinkronkan akses ke daftar konteks aliran. Lihat Keterangan untuk detailnya.
AePushlock tersedia dimulai dengan Windows 10, versi 20H2 (yaitu, jika bidang bit Versi dari struktur FSRTL_COMMON_FCB_HEADER lebih besar dari atau sama dengan FSRTL_FCB_HEADER_V3), dan harus diinisialisasi dengan memanggil FsRtlSetupAdvancedHeaderEx2.
ReservedContextLegacy
Bidang ini disediakan untuk penggunaan sistem. Ini hanya digunakan dalam Windows 8.1 hingga Windows 10, versi 1803 (jika versi bit-field dari struktur FSRTL_COMMON_FCB_HEADER lebih besar dari atau sama dengan FSRTL_FCB_HEADER_V3).
BypassIoOpenCount
Melacak berapa banyak handel yang saat ini terbuka dengan BypassIO diaktifkan pada aliran ini.
Bidang ini tersedia mulai dari Windows 11 (yaitu, jika bidang bit Versi dari struktur FSRTL_COMMON_FCB_HEADER lebih besar dari atau sama dengan FSRTL_FCB_HEADER_V4).
ReservedContext
Dicadangkan untuk penggunaan sistem.
Bidang ini tersedia mulai dari Windows 11, versi 22H2 (yaitu, jika bidang bit Versi dari struktur FSRTL_COMMON_FCB_HEADER lebih besar dari atau sama dengan FSRTL_FCB_HEADER_V5).
Keterangan
Struktur FSRTL_ADVANCED_FCB_HEADER adalah superset dari struktur FSRTL_COMMON_FCB_HEADER . Sistem file (termasuk filter warisan dan driver minifilter, jika berlaku) harus menggunakan struktur FSRTL_ADVANCED_FCB_HEADER .
Sistem file harus menggunakan salah satu makro berikut untuk menginisialisasi struktur FSRTL_ADVANCED_FCB_HEADER :
- FsRtlSetupAdvancedHeader
- FsRtlSetupAdvancedHeaderEx
- FsRtlSetupAdvancedHeaderEx2, tersedia mulai dari Windows 10, versi 20H2.
Bendera berikut diatur oleh makro ini.
Bendera | Makna |
---|---|
FSRTL_FLAG_ADVANCED_HEADER | Diatur dalam anggota Bendera dari struktur FSRTL_COMMON_FCB_HEADER , bendera ini menunjukkan dukungan driver sistem file untuk struktur FSRTL_ADVANCED_FCB_HEADER . Bendera ini tidak boleh dimodifikasi. |
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS | Diatur dalam anggota Flags2dari FSRTL_COMMON_FCB_HEADER, bendera ini menunjukkan dukungan untuk konteks driver filter. Bendera ini hanya dapat dikosongkan untuk file halaman (lihat informasi setelah tabel). |
Sistem file harus mengatur anggota FsContext dari setiap objek file untuk menunjuk ke struktur FSRTL_ADVANCED_FCB_HEADER . Struktur ini dapat disematkan di dalam struktur objek konteks yang khusus untuk aliran sistem file (sisa strukturnya adalah file-system–specific). Biasanya, struktur ini adalah blok kontrol file (FCB). Namun, pada beberapa sistem file yang mendukung beberapa aliran data, seperti NTFS, ini adalah blok kontrol aliran (SCB). Perhatikan bahwa FCR dan SCB untuk semua kelas permintaan terbuka, termasuk permintaan buka volume, harus menyertakan struktur ini.
Jika file adalah file halaman, struktur FSRTL_ADVANCED_FCB_HEADER harus dialokasikan dari kumpulan yang tidak di-halaman. Jika tidak, itu dapat dialokasikan dari kumpulan halaman atau tidak bertumpuk.
Semua sistem file Microsoft menonaktifkan dukungan konteks aliran untuk file halaman dengan menghapus bendera FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS di anggota Flags2FSRTL_COMMON_FCB_HEADER setelah mereka memanggil FsRtlSetupAdvancedHeader. (Lihat fungsi FatCreateFcb di Strucsup.c untuk sampel FASTFAT WDK.) Anda sangat dianjurkan untuk melakukan hal yang sama dalam sistem file atau sistem Anda sehingga sistem operasi akan berperilaku konsisten di semua sistem file.
Perluas kunci dorong secara otomatis
Kunci pendorongan perluasan otomatis diperkenalkan dalam Windows 10, versi 20H2. Ketika kunci Filter Manager awalnya dirancang, sistem multi-prosesor besar sangat jarang dan RAM sangat berharga. Dengan sistem seperti itu sekarang umum dan RAM tidak terbatas, penguncian dorong perluasan otomatis memberikan trade-off yang bermanfaat antara konsumsi memori dan kecepatan.
Kunci pendorongan perluasan otomatis dapat secara otomatis berubah dari kunci push reguler yang tidak sadar cache ke dalam kunci push sadar cache ketika mendeteksi bahwa kunci tersebut tunduk pada ketidakcocokan cache yang tinggi karena sejumlah besar acquirer bersama bersamaan. Kunci dorong perluasan otomatis lebih besar dari kunci pendorongan normal saat tidak diperluas, tetapi tidak hampir sebesar kunci pendorongan yang sadar cache. Jenis kunci dorong ini lebih berkinerja pada sistem multiprosem.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | ntifs.h (termasuk Ntifs.h, Fltkernel.h) |