ZwCreateSection 함수(wdm.h)

ZwCreateSection 루틴은 섹션 개체를 만듭니다.

구문

NTSYSAPI NTSTATUS ZwCreateSection(
  [out]          PHANDLE            SectionHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional] PLARGE_INTEGER     MaximumSize,
  [in]           ULONG              SectionPageProtection,
  [in]           ULONG              AllocationAttributes,
  [in, optional] HANDLE             FileHandle
);

매개 변수

[out] SectionHandle

섹션 개체에 대한 핸들을 수신하는 HANDLE 변수에 대한 포인터입니다.

[in] DesiredAccess

개체에 대한 요청된 액세스를 결정하는 ACCESS_MASK 값을 지정합니다. 호출자는 모든 유형의 개체에 대해 정의된 액세스 권한( ACCESS_MASK 참조) 외에도 섹션 개체와 관련된 다음 액세스 권한을 지정할 수 있습니다.

DesiredAccess 플래그 호출자가 이 작업을 수행할 수 있도록 허용
SECTION_EXTEND_SIZE 섹션의 크기를 동적으로 확장합니다.
SECTION_MAP_EXECUTE 섹션의 뷰를 실행합니다.
SECTION_MAP_READ 섹션의 보기를 읽습니다.
SECTION_MAP_WRITE 섹션의 보기를 작성합니다.
SECTION_QUERY 섹션에 대한 정보를 보려면 섹션 개체를 쿼리합니다. 드라이버는 이 플래그를 설정해야 합니다.
SECTION_ALL_ACCESS 모든 이전 플래그가 STANDARD_RIGHTS_REQUIRED 결합되었습니다.

[in, optional] ObjectAttributes

개체 이름 및 기타 특성을 지정하는 OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. InitializeObjectAttributes를 사용하여 이 구조를 초기화합니다. 호출자가 시스템 스레드 컨텍스트에서 실행되고 있지 않으면 InitializeObjectAttributes를 호출할 때 OBJ_KERNEL_HANDLE 특성을 설정해야 합니다.

[in, optional] MaximumSize

섹션의 최대 크기(바이트)를 지정합니다. ZwCreateSection 은 이 값을 PAGE_SIZE 가장 가까운 배수로 반올림합니다. 섹션이 페이징 파일에서 지원되는 경우 MaximumSize 는 섹션의 실제 크기를 지정합니다. 섹션이 일반 파일에서 지원되는 경우 MaximumSize 는 파일을 확장하거나 매핑할 수 있는 최대 크기를 지정합니다.

[in] SectionPageProtection

섹션의 각 페이지에 배치할 보호를 지정합니다. PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE 또는 PAGE_WRITECOPY 네 가지 값 중 하나를 사용합니다. 이러한 값에 대한 설명은 CreateFileMapping을 참조하세요.

[in] AllocationAttributes

섹션의 할당 특성을 결정하는 SEC_XXX 플래그의 비트 마스크를 지정합니다. 이러한 플래그에 대한 설명은 CreateFileMapping을 참조하세요.

[in, optional] FileHandle

선택적으로 열려 있는 파일 개체에 대한 핸들을 지정합니다. FileHandle 값이 NULL이면 섹션이 페이징 파일로 뒷받침됩니다. 그렇지 않으면 섹션이 지정된 파일에서 지원됩니다.

반환 값

ZwCreateSection 은 성공 시 STATUS_SUCCESS 반환하거나 실패 시 적절한 NTSTATUS 오류 코드를 반환합니다. 가능한 오류 상태 코드에는 다음이 포함됩니다.

반환 코드 설명
STATUS_FILE_LOCK_CONFLICT FileHandle 매개 변수로 지정된 파일이 잠겨 있습니다.
STATUS_INVALID_FILE_FOR_SECTION FileHandle에서 지정한 파일은 섹션을 지원하지 않습니다.
STATUS_INVALID_PAGE_PROTECTION SectionPageProtection 매개 변수에 지정된 값이 잘못되었습니다.
STATUS_MAPPED_FILE_SIZE_ZERO FileHandle에 지정된 파일의 크기는 0이고 MaximumSize는 0입니다.
STATUS_SECTION_TOO_BIG MaximumSize 값이 너무 큽니다. 이는 MaximumSize 가 섹션의 시스템 정의 최댓값보다 크거나 MaximumSize 가 지정된 파일보다 크고 섹션을 쓸 수 없는 경우에 발생합니다.

설명

SectionHandle이 가리키는 핸들이 더 이상 사용되지 않으면 드라이버는 ZwClose를 호출하여 닫아야 합니다.

호출자가 시스템 스레드 컨텍스트에서 실행되고 있지 않으면 호출자가 만드는 모든 핸들이 프라이빗 핸들인지 확인해야 합니다. 그렇지 않으면 드라이버가 실행 중인 컨텍스트의 프로세스에서 핸들에 액세스할 수 있습니다. 자세한 내용은 개체 핸들을 참조하세요.

매핑된 섹션 및 메모리 보기를 설정하는 방법에 대한 자세한 내용은 섹션 및 보기를 참조하세요.

이 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwCreateSection" 대신 "NtCreateSection"이라는 이름을 사용해야 합니다.

커널 모드 드라이버에서 호출하는 경우 Windows 네이티브 시스템 서비스 루틴의 NtXxxZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 NtXxx 버전과 ZwXxx 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용을 참조하세요.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

추가 정보

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection