다음을 통해 공유


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이면 ZwMapViewOfSectionExSectionOffset 에서 시작하여 섹션의 끝까지 계속되는 섹션의 보기를 매핑합니다. 그렇지 않으면 초기 값은 뷰의 크기(바이트)를 지정합니다. 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 플래그에 대한 자세한 내용은 VirtualAllocMapViewOfFile3 루틴에 대한 설명을 참조하세요.

[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 네이티브 시스템 서비스 루틴의 NtXxxZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 NtXxx 버전과 ZwXxx 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 11 버전 24H2
머리글 wdm.h

추가 정보

네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용

ZwCreateSection

ZwOpenSection

ZwMapViewOfSection

ZwUnmapViewOfSection

MapViewOfFile3