BOOLEAN RtlCopyMemoryEx(PVOID lpDst, PVOID lpSrc, ULONG_PTR nLen)
{
BOOLEAN bRet = FALSE;
PMDL lpMemoryDescriptorList;
PVOID lpMappedAddress;
if (lpMemoryDescriptorList = IoAllocateMdl(lpDst, nLen, FALSE, FALSE, NULL))
{
__try
{
MmProbeAndLockPages(lpMemoryDescriptorList, KernelMode, IoReadAccess);
if (lpMappedAddress = MmMapLockedPagesSpecifyCache(lpMemoryDescriptorList, KernelMode, MmNonCached, NULL, FALSE, HighPagePriority))
{
if (NT_SUCCESS(MmProtectMdlSystemAddress(lpMemoryDescriptorList, PAGE_READWRITE)))
{
RtlCopyMemory(lpMappedAddress, lpSrc, nLen);
bRet = TRUE;
}
MmUnmapLockedPages(lpMappedAddress, lpMemoryDescriptorList);
}
MmUnlockPages(lpMemoryDescriptorList);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
}
IoFreeMdl(lpMemoryDescriptorList);
}
return bRet;
}
RtlCopyMemoryEx
最新推荐文章于 2021-05-11 05:15:51 发布