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
파일과 연결된 모든 컨텍스트 구조 목록의 헤드에 대한 포인터입니다. 필터 드라이버는
PushLock
FilterContexts 목록에 대한 액세스를 동기화하는 데 사용되는 푸시 잠금입니다. 이 필드는 Windows Vista부터만 사용할 수 있습니다(즉, FSRTL_COMMON_FCB_HEADER 구조의 버전 비트 필드가 FSRTL_FCB_HEADER_V1이상인 경우).
FileContextSupportPointer
파일 컨텍스트를 추적하기 위해 FSRTL(파일 시스템 런타임 라이브러리)에서 사용하는 포인터 필드에 대한 포인터입니다. NULL
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 구조를 초기화해야 합니다.
- FsRtlSetupAdvancedHeader
- FsRtlSetupAdvancedHeaderEx
- FsRtlSetupAdvancedHeaderEx2Windows 10 버전 20H2부터 사용할 수 있습니다.
다음 플래그는 이러한 매크로에 의해 설정됩니다.
기 | 의미 |
---|---|
FSRTL_FLAG_ADVANCED_HEADER | FSRTL_COMMON_FCB_HEADER 구조체의 Flags 멤버에 설정된 이 플래그는 FSRTL_ADVANCED_FCB_HEADER 구조체에 대한 파일 시스템 드라이버 지원을 나타냅니다. 이 플래그는 수정하면 안 됩니다. |
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS | FSRTL_COMMON_FCB_HEADERFlags2 멤버에 설정됩니다. 이 플래그는 필터 드라이버 컨텍스트에 대한 지원을 나타냅니다. 이 플래그는 페이징 파일에 대해서만 지울 수 있습니다(테이블 뒤의 정보 참조). |
파일 시스템은 FSRTL_ADVANCED_FCB_HEADER 구조를 가리키도록 모든 파일 개체의 FsContext 멤버를 설정해야 합니다. 이 구조체는 파일 시스템 스트림과 관련된 컨텍스트 개체 구조 내에 포함될 수 있습니다(구조의 나머지 부분에서는 파일 시스템별). 일반적으로 이 구조는 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 포함) |
참고 항목
FsRtlInsertPerStreamContext
FsRtlLookupPerStreamContext
FsRtlRemovePerStreamContext