共用方式為


FSRTL_ADVANCED_FCB_HEADER結構 (ntifs.h)

FSRTL_ADVANCED_FCB_HEADER 結構包含檔案系統維護檔案的內容資訊。

語法

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;

成員

DUMMYSTRUCTNAME

未命名的成員,其中包含類型為 FSRTL_COMMON_FCB_HEADER的結構。

FastMutex

初始化之快速 Mutex 的指標,用來同步存取 DUMMYSTRUCTNAME的下列成員:

  • AllocationSize
  • FileSize
  • ValidDataLength

如果存在,則會使用 PushLock 成員來同步存取 FilterContexts 成員;否則會使用 FastMutex

FilterContexts

與檔案相關聯之所有內容結構的前端指標。 篩選驅動程式可以呼叫 FsRtlLookupPerStreamContext 來搜尋此清單,並藉由呼叫 FsRtlInsertPerStreamContextFsRtlRemovePerStreamContext來修改清單。

PushLock

用來同步處理 FilterContexts 清單存取權的推送鎖定。 此欄位只能從 Windows Vista 開始使用(也就是說,如果 FSRTL_COMMON_FCB_HEADER 結構的 Version 位字段大於或等於 FSRTL_FCB_HEADER_V1)。

FileContextSupportPointer

檔案系統運行時間連結庫 (FSRTL) 用來追蹤檔案內容的指標字段指標。 如果沒有 NULL,這個成員必須是建立結構之文件系統之每個檔案結構內 PVOID 變數的指標。 如果 NULL,則不支援檔案內容。 這個成員只能從 Windows Vista 開始使用(也就是說,如果 版本FSRTL_COMMON_FCB_HEADER 結構的位字段大於或等於 FSRTL_FCB_HEADER_V1)。

Oplock

檔案或目錄的 oplock。 此欄位只能從 Windows 8 開始使用(也就是說,如果 FSRTL_COMMON_FCB_HEADER 結構的 版本 位字段大於或等於 FSRTL_FCB_HEADER_V2)。

ReservedForRemote

如果檔案系統是遠端的,則會保留此欄位。 它只能從 Windows 8 開始使用(也就是說,如果 FSRTL_COMMON_FCB_HEADER 結構的 版本 位字段大於或等於 FSRTL_FCB_HEADER_V2)。

AePushLock

自動展開的推送鎖定,會使用 而不是 PushLock 同步處理串流內容清單的存取。 如需詳細資訊,請參閱<

AePushlock 可從 Windows 10 版本 20H2 開始使用(也就是說,如果 版本FSRTL_COMMON_FCB_HEADER 結構的位字段大於或等於 FSRTL_FCB_HEADER_V3),而且必須藉由呼叫 FsRtlSetupAdvancedHeaderEx2初始化。

ReservedContextLegacy

此欄位保留供系統使用。 它只適用於 Windows 8.1 到 Windows 10 版本 1803(如果 FSRTL_COMMON_FCB_HEADER 結構的 版本 位欄位大於或等於 FSRTL_FCB_HEADER_V3)。

BypassIoOpenCount

追蹤目前開啟的句柄數目,並在此數據流上啟用 BypassIO

此欄位可從 Windows 11 開始提供(也就是說,如果 版本FSRTL_COMMON_FCB_HEADER 結構的位字段大於或等於 FSRTL_FCB_HEADER_V4)。

ReservedContext

保留供系統使用。

此欄位可從 Windows 11 版本 22H2 開始提供(也就是說,如果 版本FSRTL_COMMON_FCB_HEADER 結構的位字段大於或等於 FSRTL_FCB_HEADER_V5)。

言論

FSRTL_ADVANCED_FCB_HEADER 結構是 FSRTL_COMMON_FCB_HEADER 結構的超集。 檔系統(包括舊版篩選和小型篩選驅動程式,適用時)必須使用 FSRTL_ADVANCED_FCB_HEADER 結構。

檔案系統必須使用下列其中一個巨集來初始化 FSRTL_ADVANCED_FCB_HEADER 結構:

下列旗標是由這些巨集所設定。

意義
FSRTL_FLAG_ADVANCED_HEADER 旗標FSRTL_COMMON_FCB_HEADER 結構的成員中設定,此旗標表示 FSRTL_ADVANCED_FCB_HEADER 結構的檔系統驅動程序支援。 不應修改此旗標。
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS Flags2FSRTL_COMMON_FCB_HEADER成員中設定 ,此旗標表示支援篩選驅動程序內容。 這個旗標只能清除分頁檔案(請參閱數據表之後的資訊)。

文件系統必須設定每個檔案物件的 FsContext 成員,以指向 FSRTL_ADVANCED_FCB_HEADER 結構。 此結構可以內嵌在檔案系統數據流專屬的內容對象結構中(結構的其餘部分為文件系統特定)。 通常,此結構是檔案控制區塊 (FCB)。 不過,在某些支援多個數據流的文件系統上,例如NTFS,它是數據流控制區塊(SCB)。 請注意,所有開啟要求類別的 FBB 和 SCB,包括大量開啟要求,都必須包含此結構。

如果檔案是分頁檔案,則必須從非分頁集區配置 FSRTL_ADVANCED_FCB_HEADER 結構。 否則,可以從分頁或非分頁集區進行配置。

所有Microsoft文件系統都會在呼叫 FsRtlSetupAdvancedHeader之後,清除 Flags2 成員中的 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS 旗標來停用分頁檔案 FSRTL_COMMON_FCB_HEADER 的數據流內容支援。 (如需FASTFAT WDK範例,請參閱 Strucsup.c 中的 FatCreateFcb 函式。強烈建議您在文件系統或系統中執行相同的動作,讓作業系統在所有文件系統上以一致的方式運作。

自動展開推播鎖定

Windows 10 版本 20H2 引進了自動展開推播鎖定。 當篩選管理員的鎖定最初設計時,大型多處理器系統非常罕見,RAM 非常珍貴。 由於這類系統現在很常見,RAM 並不有限,自動展開推入鎖定可在記憶體耗用量和速度之間提供有益的取捨。

當自動展開推播鎖定偵測到由於大量並行共用取得者而導致快取競爭時,自動從一般非快取感知推入鎖定自動變更為快取感知推播鎖定。 自動展開推入鎖定在未展開時大於一般推入鎖定,但不像快取感知推入鎖定那麼大。 此推入鎖定類型在多處理器系統上效能更高。

要求

要求 價值
標頭 ntifs.h (include Ntifs.h, Fltkernel.h)

另請參閱

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts