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) |