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

DUMMYSTRUCTNAME의 다음 멤버에 대한 액세스를 동기화하는 데 사용되는 초기화된 빠른 뮤텍스에 대한 포인터입니다.

  • AllocationSize
  • FileSize
  • ValidDataLength

있는 경우 PushLock 멤버는 FilterContexts 멤버에 대한 액세스를 동기화하는 데 사용됩니다. 그렇지 않으면 FastMutex 가 사용됩니다.

FilterContexts

파일과 연결된 모든 컨텍스트 구조 목록의 헤드에 대한 포인터입니다. 필터 드라이버는 FsRtlLookupPerStreamContext 를 호출하여 이 목록을 검색하고 FsRtlInsertPerStreamContextFsRtlRemovePerStreamContext를 호출하여 수정할 수 있습니다.

PushLock

FilterContexts 목록에 대한 액세스를 동기화하는 데 사용되는 푸시 잠금입니다. 이 필드는 Windows Vista부터만 사용할 수 있습니다(즉, FSRTL_COMMON_FCB_HEADER 구조의 버전 비트 필드가 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

BypassIoOpenCount

이 스트림에서 BypassIO 를 사용하도록 설정하여 현재 열려 있는 핸들 수를 추적합니다.

이 필드는 Windows 11(즉, FSRTL_COMMON_FCB_HEADER 구조체의 버전 비트 필드가 FSRTL_FCB_HEADER_V4 보다 크거나 같은 경우)부터 사용할 수 있습니다.

ReservedContext

이 필드는 시스템 사용을 위해 예약되어 있습니다. Windows 10 버전 1803을 통해 Windows 8.1만 사용됩니다(FSRTL_COMMON_FCB_HEADER 구조의 버전 비트 필드가 FSRTL_FCB_HEADER_V3 보다 크거나 같은 경우).

설명

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_HEADERFlags2 멤버에 설정된 이 플래그는 필터 드라이버 컨텍스트에 대한 지원을 나타냅니다. 이 플래그는 페이징 파일에 대해서만 지울 수 있습니다(테이블 뒤의 정보 참조).

파일 시스템은 모든 파일 개체의 FsContext 멤버가 FSRTL_ADVANCED_FCB_HEADER 구조를 가리키도록 설정해야 합니다. 이 구조체는 파일 시스템 스트림과 관련된 컨텍스트 개체 구조 내에 포함될 수 있습니다(구조체의 나머지는 파일 시스템별). 일반적으로 이 구조는 FCB(파일 제어 블록)입니다. 그러나 NTFS와 같은 여러 데이터 스트림을 지원하는 일부 파일 시스템에서는 SCB(스트림 제어 블록)입니다. 볼륨 열기 요청을 포함하여 열려 있는 요청의 모든 클래스에 대한 FCB 및 SCB에는 이 구조가 포함되어야 합니다.

파일이 페이징 파일인 경우 FSRTL_ADVANCED_FCB_HEADER 구조체는 페이지가 없는 풀에서 할당되어야 합니다. 그렇지 않으면 페이징된 풀 또는 비페이지 풀에서 할당할 수 있습니다.

모든 Microsoft 파일 시스템은 FsRtlSetupAdvancedHeader를 호출한 후 FSRTL_COMMON_FCB_HEADERFlags2 멤버에서 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS 플래그를 지워 페이징 파일에 대한 스트림 컨텍스트 지원을 사용하지 않도록 설정합니다. FASTFAT WDK 샘플은 Strucsup.cFatCreateFcb 함수를 참조하세요. 모든 파일 시스템에서 운영 체제가 일관된 방식으로 작동하도록 파일 시스템 또는 시스템에서 동일한 작업을 수행하는 것이 좋습니다.

푸시 잠금 자동 확장

자동 확장 푸시 잠금은 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