ZwMapViewOfSectionEx 함수(wdm.h)
ZwMapViewOfSectionEx 루틴은 섹션 보기를 주체 프로세스의 가상 주소 공간에 매핑합니다.
구문
NTSYSAPI NTSTATUS ZwMapViewOfSectionEx(
[in] HANDLE SectionHandle,
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in, out, optional] PLARGE_INTEGER SectionOffset,
[in, out] PSIZE_T ViewSize,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] PMEM_EXTENDED_PARAMETER ExtendedParameters,
[in] ULONG ExtendedParameterCount
);
매개 변수
[in] SectionHandle
섹션 개체에 대한 핸들입니다. 이 핸들은 ZwCreateSection 또는 ZwOpenSection을 성공적으로 호출하여 만듭니다.
[in] ProcessHandle
뷰를 매핑해야 하는 프로세스를 나타내는 개체에 대한 핸들입니다. ZwCurrentProcess 매크로를 사용하여 현재 프로세스를 지정합니다. 핸들은 PROCESS_VM_OPERATION 액세스 권한으로 열렸어야 합니다.
[in, out] BaseAddress
뷰의 기본 주소를 수신하는 변수에 대한 포인터입니다. 이 매개 변수의 값이 NULL이 아닌 경우 뷰는 다음 64킬로바이트 주소 경계로 반올림된 지정된 가상 주소에서 시작하여 할당됩니다.
[in, out, optional] SectionOffset
섹션의 시작 부분에서 뷰까지 오프셋(바이트)을 수신하는 변수에 대한 포인터입니다. 이 포인터가 NULL이 아니면 오프셋이 다음 할당 세분성 크기 경계로 반올림됩니다.
[in, out] ViewSize
SIZE_T 변수에 대한 포인터입니다. 이 변수의 초기 값이 0이면 ZwMapViewOfSectionEx 는 SectionOffset 에서 시작하여 섹션의 끝까지 계속되는 섹션의 보기를 매핑합니다. 그렇지 않으면 초기 값은 뷰의 크기(바이트)를 지정합니다. ZwMapViewOfSectionEx는 보기를 매핑하기 전에 항상 이 값을 PAGE_SIZE 가장 가까운 배수로 반올림합니다.
반환 시 값은 뷰의 실제 크기(바이트)를 받습니다.
[in] AllocationType
지정한 페이지 영역에 대해 수행할 할당 유형을 설명하는 플래그 집합을 지정합니다. 유효한 플래그는 MEM_RESERVE, MEM_TOP_DOWN, MEM_LARGE_PAGES, MEM_DIFFERENT_IMAGE_BASE_OK 및 MEM_REPLACE_PLACEHOLDER. MEM_COMMIT 허용되지 않지만 MEM_RESERVE 지정하지 않으면 암시됩니다. MEM_XXX 플래그에 대한 자세한 내용은 VirtualAlloc 및 MapViewOfFile3 루틴에 대한 설명을 참조하세요.
[in] PageProtection
매핑된 보기에 적용할 페이지 보호를 지정합니다.
SEC_IMAGE 특성으로 만든 섹션 개체의 경우 PageProtection 매개 변수는 효과가 없으며 PAGE_READONLY 같은 유효한 값으로 설정할 수 있습니다.
SEC_IMAGE_NO_EXECUTE 특성으로 만든 섹션 개체의 경우 PageProtection 값을 PAGE_READONLY 설정해야 합니다.
이미지가 아닌 섹션의 경우 PageProtection 매개 변수 값은 ZwCreateSection이 호출될 때 지정된 섹션의 페이지 보호와 호환되어야 합니다.
ZwMapViewOfSectionEx 는 항상 매핑된 페이지의 캐시 형식을 섹션 개체를 만들 때 제공된 캐시 형식과 일치하도록 설정합니다. 예를 들어 ZwCreateSection이 SEC_NOCACHE 플래그로 호출된 경우 PageProtection 매개 변수에 PAGE_NOCACHE 플래그가 포함되어 있는지 여부에 관계없이 ZwMapViewOfSectionEx 는 페이지를 캐시되지 않은 상태로 매핑합니다.
[in, out, optional] ExtendedParameters
MEM_EXTENDED_PARAMETER 형식의 하나 이상의 확장 매개 변수에 대한 선택적 포인터입니다. 확장 매개 변수에 대한 자세한 내용은 MapViewOfFile3 루틴에 대한 설명을 참조하세요.
[in] ExtendedParameterCount
ExtendedParameters 배열의 요소 수를 지정합니다.
반환 값
ZwMapViewOfSectionEx 는 NTSTATUS 값을 반환합니다. 가능한 반환 값은 다음과 같습니다.
반환 코드 | 설명 |
---|---|
STATUS_SUCCESS | 루틴이 요청된 작업을 성공적으로 수행했습니다. |
STATUS_CONFLICTING_ADDRESSES | 지정된 주소 범위가 이미 예약된 범위와 충돌합니다. |
STATUS_INVALID_PAGE_PROTECTION | PageProtection 매개 변수에 지정된 값이 잘못되었습니다. |
STATUS_SECTION_PROTECTION | PageProtection 매개 변수에 지정된 값은 섹션을 만들 때 지정된 페이지 보호와 호환되지 않습니다. |
설명
섹션의 여러 다른 보기를 하나 이상의 프로세스의 가상 주소 공간에 동시에 매핑할 수 있습니다.
드라이버가 MmAllocatePagesForMdlEx를 통해 메모리 범위를 직접 할당하거나 다른 시스템 구성 요소가 다른 MEMORY_CACHING_TYPE 값으로 동일한 메모리 범위를 매핑하지 않은 경우 ZwMapViewOfSectionEx를 사용하여 \Device\PhysicalMemory의 메모리 범위를 사용자 모드로 매핑하지 마세요.
사용자 애플리케이션은 SP1(서비스 팩 1)을 사용하여 Windows Server 2003부터 직접 \Device\PhysicalMemory 에 액세스할 수 없으며 드라이버가 애플리케이션에 핸들을 전달하는 경우에만 액세스할 수 있습니다.
섹션 개체에 대한 자세한 내용은 섹션 개체 및 뷰를 참조하세요.
이 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwMapViewOfSectionEx" 대신 "NtMapViewOfSectionEx" 이름을 사용해야 합니다.
커널 모드 드라이버에서 호출하는 경우 Windows 네이티브 시스템 서비스 루틴의 NtXxx 및 ZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 NtXxx 버전과 ZwXxx 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 11 버전 24H2 |
머리글 | wdm.h |