MmReMapSpace

typedef	BOOLEAN (*pfnReMapCallBack)(PVOID MapAddress, ULONG MapSize, PVOID MappedAddress, PVOID p1, PVOID p2, PVOID p3, PVOID p4);
BOOLEAN MmReMapSpace(PVOID MapAddress, ULONG MapSize, pfnReMapCallBack lpfn, PVOID p1, PVOID p2, PVOID p3, PVOID p4);
BOOLEAN MmReMapSpace(PVOID MapAddress, ULONG MapSize, pfnReMapCallBack lpfn, PVOID p1, PVOID p2, PVOID p3, PVOID p4)
{
	BOOLEAN bRet = FALSE;
	PMDL    lpMemoryDescriptorList;
	PVOID   lpMappedAddress;

	if (lpMemoryDescriptorList = IoAllocateMdl(MapAddress, MapSize, FALSE, FALSE, NULL))
	{
		__try
		{
			MmProbeAndLockPages(lpMemoryDescriptorList, KernelMode, IoReadAccess);
			if (lpMappedAddress = MmMapLockedPagesSpecifyCache(lpMemoryDescriptorList, KernelMode, MmNonCached, NULL, FALSE, HighPagePriority))
			{
				if (NT_SUCCESS(MmProtectMdlSystemAddress(lpMemoryDescriptorList, PAGE_READWRITE)))
				{
					bRet = lpfn(MapAddress, MapSize, lpMappedAddress, p1, p2, p3, p4);
				}
				MmUnmapLockedPages(lpMappedAddress, lpMemoryDescriptorList);
			}
			MmUnlockPages(lpMemoryDescriptorList);
		}
		__except(EXCEPTION_EXECUTE_HANDLER)
		{
		}
		IoFreeMdl(lpMemoryDescriptorList);
	}
	return bRet;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值