Bagikan melalui


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 :

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)

Lihat juga

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts