FsRtlCreateSectionForDataScan 함수(ntifs.h)

FsRtlCreateSectionForDataScan 루틴은 섹션 개체를 만듭니다. 이 루틴은 매우 주의해서 사용합니다. (다음 설명 섹션 참조하세요.)

구문

NTSTATUS FsRtlCreateSectionForDataScan(
  [out]           PHANDLE            SectionHandle,
  [out]           PVOID              *SectionObject,
  [out, optional] PLARGE_INTEGER     SectionFileSize,
  [in]            PFILE_OBJECT       FileObject,
  [in]            ACCESS_MASK        DesiredAccess,
  [in, optional]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional]  PLARGE_INTEGER     MaximumSize,
  [in]            ULONG              SectionPageProtection,
  [in]            ULONG              AllocationAttributes,
  [in]            ULONG              Flags
);

매개 변수

[out] SectionHandle

섹션 개체에 대한 불투명 핸들을 수신하는 호출자가 할당한 변수에 대한 포인터입니다.

[out] SectionObject

섹션 개체에 대한 불투명 포인터를 수신하는 호출자가 할당한 변수에 대한 포인터입니다.

[out, optional] SectionFileSize

section 개체를 만들 때 파일의 크기(바이트)를 수신하는 호출자 할당 변수에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

[in] FileObject

열려 있는 파일의 파일 개체입니다. section 개체는 지정된 파일에서 백업됩니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

[in] DesiredAccess

섹션 개체에 대한 원하는 액세스를 다음 ACCESS_MASK 플래그 중 하나 이상으로 지정합니다.

DesiredAccess 플래그 호출자가 다음을 할 수 있도록 허용
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 매크로를 사용하여 이 구조를 초기화합니다. FsRtlCreateSectionForDataScan은 이 개체를 프로세스 핸들 테이블에 삽입하므로 호출자는 InitializeObjectAttributes를 호출할 때 OBJ_KERNEL_HANDLE 특성을 지정해야 합니다.

[in, optional] MaximumSize

이 매개 변수는 나중에 사용하도록 예약되어 있습니다.

[in] SectionPageProtection

섹션의 각 페이지에 배치할 보호를 지정합니다. 다음 값 중 하나를 지정합니다. 이 매개 변수는 필수이며 0일 수 없습니다.

플래그 의미
PAGE_READONLY 커밋된 페이지의 영역에 대한 읽기 전용 액세스를 사용하도록 설정합니다. 커밋된 지역에 쓰려고 시도하면 액세스 위반이 발생합니다. 시스템에서 읽기 전용 액세스와 실행 액세스를 구분하는 경우 커밋된 지역에서 코드를 실행하려고 하면 액세스 위반이 발생합니다.
PAGE_READWRITE 페이지의 커밋된 영역에 대한 읽기 및 쓰기 액세스를 모두 사용하도록 설정합니다.

[in] AllocationAttributes

SEC_XXX 플래그의 비트 마스크는 섹션의 할당 특성을 결정합니다. 다음 값 중 하나 이상을 지정합니다. 이 매개 변수는 필수이며 0일 수 없습니다.

플래그 의미
SEC_COMMIT 섹션의 모든 페이지에 대해 메모리 또는 디스크의 페이징 파일에 실제 스토리지를 할당합니다. 이 값은 기본 설정입니다. 이 플래그는 필수이며 생략할 수 없습니다.
SEC_FILE FileObject 매개 변수로 지정된 파일은 매핑된 파일입니다.

[in] Flags

이 매개 변수는 나중에 사용하도록 예약되어 있습니다.

반환 값

FsRtlCreateSectionForDataScan 은 STATUS_SUCCESS 또는 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.

반환 코드 설명
STATUS_END_OF_FILE
FileObject 매개 변수로 지정된 파일의 크기는 0입니다. 오류 코드입니다.
STATUS_FILE_LOCK_CONFLICT
FileObject 매개 변수로 지정된 파일이 잠겨 있습니다. 오류 코드입니다.
STATUS_INSUFFICIENT_RESOURCES
FsRtlCreateSectionForDataScan에서 풀 할당 오류가 발생했습니다. 오류 코드입니다.
STATUS_INVALID_FILE_FOR_SECTION
FileObject 매개 변수로 지정된 파일은 섹션을 지원하지 않습니다. 오류 코드입니다.
STATUS_INVALID_PARAMETER_8
SectionPageProtection 매개 변수에 지정된 값이 잘못되었습니다. 오류 코드입니다.
STATUS_INVALID_PARAMETER_9
호출자가 AllocationAttributes 매개 변수에 잘못된 값을 지정했습니다. 오류 코드입니다.
STATUS_PRIVILEGE_NOT_HELD

호출자에게 DesiredAccess 매개 변수에 지정된 액세스 권한이 있는 섹션 개체를 만드는 데 필요한 권한이 없습니다. 오류 코드입니다.

설명

중요FsRtlCreateSectionForDataScan 루틴은 FileObject 매개 변수에 지정된 파일 개체에 대한 핸들이 아직 만들어지지 않은 경우에만 사용해야 합니다(일반적으로 사후 만들기 작업을 처리하는 동안). 드라이버에 파일 개체에 대한 핸들이 있거나 파일 개체에 대한 핸들을 가져올 수 있는 경우 드라이버는 ZwCreateSection 루틴을 대신 사용해야 합니다.
 
이 루틴에서 만든 section 개체가 더 이상 필요하지 않으면 ZwClose 루틴을 호출하여 section 개체의 핸들(SectionHandle)을 닫고 ObDereferenceObject 루틴을 호출하여 section 개체 자체(SectionObject)를 역참조해야 합니다.

매핑된 섹션 및 메모리 뷰를 만드는 방법에 대한 자세한 내용은 섹션 개체 및 뷰를 참조하세요. 또한 Microsoft Windows SDK CreateFileMapping 루틴에 대한 설명서를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 SP4(서비스 팩 4)용 업데이트 롤업); Windows XP SP2(서비스 팩 2)에 대한 필터 관리자 롤업입니다.
지원되는 최소 서버 Microsoft Windows Server 2003 SP1
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

추가 정보

ACCESS_MASK

CcPurgeCacheSection

MmFlushImageSection

MmForceSectionClosed

ZwCreateSection