FltCreateSectionForDataScan 함수(fltkernel.h)
FltCreateSectionForDataScan 루틴은 파일에 대한 섹션 개체를 만듭니다. 필터 관리자는 필요에 따라 I/O를 만든 섹션과 동기화할 수 있습니다.
통사론
NTSTATUS FLTAPI FltCreateSectionForDataScan(
[in] PFLT_INSTANCE Instance,
[in] PFILE_OBJECT FileObject,
[in] PFLT_CONTEXT SectionContext,
[in] ACCESS_MASK DesiredAccess,
[in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
[in, optional] PLARGE_INTEGER MaximumSize,
[in] ULONG SectionPageProtection,
[in] ULONG AllocationAttributes,
[in] ULONG Flags,
[out] PHANDLE SectionHandle,
[out] PVOID *SectionObject,
[out, optional] PLARGE_INTEGER SectionFileSize
);
매개 변수
[in] Instance
컨텍스트를 검색할 미니 필터 드라이버 인스턴스에 대한 불투명 인스턴스 포인터입니다.
[in] FileObject
열려 있는 파일의 파일 개체입니다. 섹션 개체는 지정된 파일에서 지원됩니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.
[in] SectionContext
이전에 할당된 섹션 컨텍스트에 대한 포인터입니다.
[in] DesiredAccess
다음 ACCESS_MASK 플래그 중 하나 이상의 섹션 개체에 대한 액세스 유형입니다.
기 | 호출자가 다음을 할 수 있도록 허용 |
---|---|
SECTION_MAP_READ | 섹션의 보기를 읽습니다. |
SECTION_MAP_WRITE | 섹션의 보기를 작성합니다. |
SECTION_QUERY | 섹션 개체에서 섹션에 대한 정보를 쿼리합니다. 드라이버는 이 플래그를 설정해야 합니다. |
SECTION_ALL_ACCESS | 이전 플래그에서 정의한 모든 작업과 STANDARD_RIGHTS_REQUIRED 정의한 작업 STANDARD_RIGHTS_REQUIRED 대한 자세한 내용은 ACCESS_MASK참조하세요. |
[in, optional] ObjectAttributes
개체 이름 및 기타 특성을 지정하는 선택적 OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. InitializeObjectAttributes 매크로를 사용하여 이 구조를 초기화합니다.
[in, optional] MaximumSize
이 매개 변수는 나중에 사용하도록 예약되어 있습니다.
[in] SectionPageProtection
섹션의 각 페이지에 배치할 보호입니다. 다음 값 중 하나를 지정합니다. 이 매개 변수는 필수이며 0일 수 없습니다.
기 | 의미 |
---|---|
PAGE_READONLY | 커밋된 페이지 영역에 대한 읽기 전용 액세스를 사용하도록 설정합니다. 커밋된 지역에 쓰려고 시도하면 액세스 위반이 발생합니다. 시스템에서 읽기 전용 액세스와 실행 액세스를 구분하는 경우 커밋된 지역에서 코드를 실행하려고 하면 액세스 위반이 발생합니다. |
PAGE_READWRITE | 커밋된 페이지 영역에 대한 읽기 및 쓰기 액세스를 모두 사용하도록 설정합니다. |
[in] AllocationAttributes
SEC_XXX 플래그의 비트 마스크는 섹션의 할당 특성을 결정합니다. 다음 값 중 하나 이상을 지정합니다. 이 매개 변수는 필수이며 0일 수 없습니다.
기 | 의미 |
---|---|
SEC_COMMIT | 섹션의 모든 페이지에 대해 메모리 또는 디스크의 페이징 파일에 실제 스토리지를 할당합니다. 기본 설정입니다. 이 플래그는 필수이며 생략할 수 없습니다. |
SEC_FILE | FileObject 매개 변수로 지정된 파일은 매핑된 파일입니다. |
[in] Flags
이 매개 변수는 나중에 사용하도록 예약되어 있습니다.
[out] SectionHandle
섹션에 대한 불투명 핸들을 수신하는 호출자 할당 변수에 대한 포인터입니다. 기본적으로 섹션 핸들은 사용자 핸들입니다. 호출자에게 커널 핸들이 필요한 경우 OBJ_KERNEL_HANDLE 플래그가 설정된 ObjectAttributes 매개 변수의 초기화된 OBJECT_ATTRIBUTES 구조에 대한 포인터를 전달해야 합니다.
[out] SectionObject
섹션 개체에 대한 불투명 포인터를 수신하는 호출자 할당 변수에 대한 포인터입니다.
[out, optional] SectionFileSize
섹션 개체를 만들 때 파일의 크기(바이트)를 수신하는 호출자 할당 변수에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.
반환 값
FltCreateSectionForDataScan STATUS_SUCCESS 또는 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.
반환 코드 | 묘사 |
---|---|
STATUS_END_OF_FILE | FileObject 매개 변수로 지정된 파일의 크기는 0입니다. |
STATUS_FILE_LOCK_CONFLICT | FileObject 매개 변수로 지정된 파일이 잠겨 있습니다. |
STATUS_INSUFFICIENT_RESOURCES | FltCreateSectionForDataScan 풀 할당 오류가 발생했습니다. |
STATUS_INVALID_FILE_FOR_SECTION | FileObject 매개 변수로 지정된 파일은 섹션을 지원하지 않습니다. |
STATUS_INVALID_PARAMETER | 미니 필터가 등록되지 않았습니다. |
STATUS_INVALID_PARAMETER_8 | SectionPageProtection 매개 변수에 지정된 값이 잘못되었습니다. |
STATUS_INVALID_PARAMETER_9 | 호출자가 AllocationAttributes 매개 변수에 잘못된 값을 지정했습니다. |
STATUS_NOT_SUPPORTED | 이 인스턴스에 연결된 볼륨은 섹션 컨텍스트를 지원하지 않습니다. |
STATUS_PRIVILEGE_NOT_HELD | 호출자에게 DesiredAccess 매개 변수에 지정된 액세스 권한이 있는 섹션 개체를 만드는 데 필요한 권한이 없습니다. |
STATUS_FILE_IS_A_DIRECTORY | FileObject 매개 변수로 지정된 파일이 디렉터리입니다. |
STATUS_FLT_CONTEXT_ALREADY_DEFINED | 인스턴스 지정한 필터 인스턴스에 스트림에 대해 열려 있는 섹션이 이미 있습니다. 따라서 인스턴스당 하나의 섹션만 지원됩니다. |
발언
fltCreateSectionForDataScan
핸들은 사용자 핸들 또는 커널 핸들일 수 있습니다. 가리키는 ObjectAttributes를
섹션을 열어 두는 것이 현재 파일 I/O와 호환되지 않는 특정 상황이 발생할 수 있습니다. 특히 캐시 제거를 트리거하는 파일 I/O는 열린 섹션으로 인해 캐시 제거가 방지되는 경우 캐시 일관성을 유발할 수 있습니다. 미니 필터는 이러한 이벤트의 알림에 대한 선택적 콜백 루틴을 제공할 수 있습니다. 미니 필터 드라이버는 이러한 알림을 수신하는 PFLT_SECTION_CONFLICT_NOTIFICATION_CALLBACK 구현합니다. FLT_REGISTRATIONSectionNotificationCallback 멤버가 미니 필터를 등록할 때 이 콜백 루틴으로 설정된 경우 충돌 알림이 활성화됩니다. 알림이 수신되면 충돌하는 I/O 작업을 계속할 수 있도록 섹션을 닫을 수 있습니다.
메모
FltCreateSectionForDataScan 반환하기 전에 섹션 알림 콜백이 발생할 수 있습니다. 미니 필터는 콜백을 수신하고 SectionHandle 및 SectionObject 아직 유효하지 않은 경우를 처리할 수 있어야 합니다.
이 루틴에서 만든 섹션 개체가 더 이상 필요하지 않은 경우 ZwClose 루틴을 호출하여 섹션 개체의 핸들(SectionHandle)을 닫고 ObDereferenceObject 루틴을 호출하여 섹션 개체 자체(SectionObject)를 역참조해야 합니다.
매핑된 섹션 및 메모리 뷰를 만드는 방법에 대한 개요 정보는 섹션 개체 및 뷰참조하세요. 또한 Microsoft Windows SDK의 CreateFileMapping 루틴에 대한 설명서를 참조하세요.
중요하다
미니 필터는 fltCreateSectionForDataScan
일반적으로 섹션은 읽기 전용으로 만들어야 합니다. 특히 읽기 전용 파일이 트랜잭션에 있고 미니 필터가 읽기 전용 섹션을 만들지 않는 경우 섹션에 대한 쓰기가 삭제되고 트랜잭션의 일부로 포함되지 않습니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8 |
대상 플랫폼 | 보편적 |
헤더 | fltkernel.h(Fltkernel.h 포함) |
라이브러리 | FltMgr.lib |
IRQL |
<= APC_LEVEL |
참고 항목
fltAllocateContext
PFLT_SECTION_CONFLICT_NOTIFICATION_CALLBACK
ZwClose
ZwCreateSection