MmMapLockedPagesWithReservedMapping 함수(wdm.h)

MmMapLockedPagesWithReservedMapping 루틴은 이전에 MmAllocateMappingAddress 루틴에 의해 예약된 주소 범위의 전부 또는 일부를 매핑합니다.

구문

PVOID MmMapLockedPagesWithReservedMapping(
  [in] PVOID                                                    MappingAddress,
  [in] ULONG                                                    PoolTag,
  [in] PMDL                                                     MemoryDescriptorList,
  [in] __drv_strictTypeMatch(__drv_typeCond)MEMORY_CACHING_TYPE CacheType
);

매개 변수

[in] MappingAddress

예약된 가상 메모리 범위의 시작 부분에 대한 포인터입니다. 이 주소는 이전에 MmAllocateMappingAddress에서 반환한 주소여야 합니다.

[in] PoolTag

예약된 메모리 버퍼에 대한 풀 태그를 지정합니다. 이는 버퍼를 예약한 MmAllocateMappingAddress 호출의 PoolTag 매개 변수에 지정된 값과 동일해야 합니다.

[in] MemoryDescriptorList

매핑할 MDL에 대한 포인터입니다. 이 MDL은 잠긴 실제 페이지를 설명해야 합니다. 잠긴 MDL은 MmProbeAndLockPages 또는 MmAllocatePagesForMdlEx 루틴을 통해 빌드할 수 있습니다.

[in] CacheType

매핑을 만드는 데 사용할 MEMORY_CACHING_TYPE 값을 지정합니다.

반환 값

MmMapLockedPagesWithReservedMapping 은 매핑된 메모리의 시작 부분에 대한 포인터를 반환하거나 시스템이 메모리를 매핑할 수 없는 경우 NULL 을 반환합니다. 이 루틴은 함수 매개 변수에 오류가 있는 경우에만 NULL 을 반환합니다(예: 드라이버의 매핑 주소가 제공된 MDL에 걸쳐 있을 만큼 크지 않음). 이 함수는 리소스가 부족한 시나리오에서도 드라이버가 앞으로 나아갈 수 있도록 하기 위한 것입니다.

설명

호출자는 MmMapLockedPagesWithReservedMapping 을 사용하여 다음과 같이 MmAllocateMappingAddress 에서 예약한 가상 메모리 범위의 하위 범위를 매핑할 수 있습니다.

  • IoAllocateMdl을 사용하여 MDL을 할당합니다. 반환된 MDL은 매핑할 가상 메모리 범위의 하위 범위의 지정된 시작 주소와 크기를 사용하여 빌드됩니다.

  • MmProbeAndLockPages를 사용하여 1단계에서 가져온 MDL에서 설명하는 물리적 페이지를 잠급니다.

  • MmMapLockedPagesWithReservedMapping을 사용하여 실제로 가상 메모리를 2단계에서 잠긴 실제 메모리에 매핑합니다. 이 함수에서 반환된 가상 주소에는 MDL에서 지정하는 바이트 오프셋이 포함됩니다. 그러나 이 함수에 의해 설정된 MDL의 MappedSystemVa 필드에는 바이트 오프셋이 포함되지 않습니다.

  • 호출자가 메모리에 액세스할 필요가 없으면 MmUnmapReservedMapping을 사용하여 메모리의 매핑을 해제합니다. 호출자는 필요에 따라 메모리 버퍼를 매핑 및 매핑 해제할 수 있으며 MmFreeMappingAddress를 사용하여 매핑 범위를 해제하기 전에 매핑을 해제해야 합니다.

MappingAddress 매개 변수는 매핑할 메모리 하위 범위의 시작이 아니라 호출자가 이전에 예약한 메모리 범위의 시작을 지정합니다. 호출자는 IoAllocateMdl을 사용하여 MDL을 할당할 때 버퍼의 시작 주소와 길이를 지정합니다. 버퍼는 예약된 메모리 범위 내에 있어야 하지만 엄격한 하위 집합일 수 있습니다.

루틴은 MDL에서 설명하는 페이지에 캐시 형식이 연결되어 있지 않은 경우에만 CacheType 매개 변수를 사용합니다. 그러나 거의 모든 경우에 페이지에는 이미 연결된 캐시 유형이 있으며 이 캐시 형식은 새 매핑에서 사용됩니다. 이 규칙의 예외는 특정 캐시 형식이 연결되어 있지 않은 MmAllocatePagesForMdl에 의해 할당된 페이지에 대한 것입니다. 이러한 페이지의 경우 CacheType 매개 변수는 매핑의 캐시 유형을 결정합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP 이상 버전의 Windows에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport)

추가 정보

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping