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 清單存取權的推送鎖定。 只有當FSRTL_COMMON_FCB_HEADER結構的 [版本] 位字段大於或等於FSRTL_FCB_HEADER_V1) 時,才能從 Windows Vista (開始使用此字段。

FileContextSupportPointer

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

Oplock

檔案或目錄的 oplock。 只有當FSRTL_COMMON_FCB_HEADER結構的 Version 位欄位大於或等於FSRTL_FCB_HEADER_V2) 時,才能使用此欄位,從 Windows 8 (開始。

ReservedForRemote

如果檔案系統是遠端的,則會保留此欄位。 只有在FSRTL_COMMON_FCB_HEADER結構的 Version 位欄位大於或等於FSRTL_FCB_HEADER_V2) 時,才能從 Windows 8 (開始使用。

AePushLock

自動展開的推送鎖定,用來取代 PushLock ,以同步處理資料流內容清單的存取。 如需詳細資訊 ,請參閱

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

ReservedContextLegacy

BypassIoOpenCount

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

這個欄位是從 Windows 11 (開始提供,也就是說,如果FSRTL_COMMON_FCB_HEADER結構的 Version 位欄位大於或等於FSRTL_FCB_HEADER_V4)

ReservedContext

此欄位保留供系統使用。 只有在FSRTL_COMMON_FCB_HEADER結構的Version 位欄位大於或等於 FSRTL_FCB_HEADER_V3) 時,才會在 Windows 8.1 Windows 10 1803 版 (中使用。

備註

FSRTL_ADVANCED_FCB_HEADER 結構是FSRTL_COMMON_FCB_HEADER結構的超集。 文件系統 (包括舊版篩選和迷你篩選驅動程式,如果適用) 必須使用 FSRTL_ADVANCED_FCB_HEADER 結構。

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

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

旗標 意義
FSRTL_FLAG_ADVANCED_HEADER FSRTL_COMMON_FCB_HEADER 結構的 Flags 成員中設定,此旗標表示文件系統驅動程式支援FSRTL_ADVANCED_FCB_HEADER結構。 不應該修改此旗標。
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS FSRTL_COMMON_FCB_HEADER的 Flags2 成員中設定,此旗標表示支援篩選驅動程序內容。 此旗標只能針對分頁檔案清除, (在數據表) 之後查看資訊。

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

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

所有 Microsoft 檔系統都會在呼叫 FsRtlSetupAdvancedHeader 之後,清除 flags2 成員中的 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS 旗標,以停用對檔案 FSRTL_COMMON_FCB_HEADER的串流內容支援。 (請參閱 Strucsup.c 中的 FatCreateFcb 函式以取得 FASTFAT WDK 範例。) 強烈建議您在文件系統或系統中執行相同的動作,讓操作系統在所有文件系統上的行為一致。

自動展開推播鎖定

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

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

規格需求

需求
標頭 ntifs.h (包括 Ntifs.h、Fltkernel.h)

另請參閱

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts