看流星社区

 找回密码
 注册账号
查看: 1928|回复: 0

标准MDL方法修改Page、NonPage内存的属性

[复制链接]

该用户从未签到

发表于 2017-6-1 17:25:49 | 显示全部楼层 |阅读模式
typedefstruct_REPROTECT_CONTEXT{PMDLMdlUCHARLockedVa;}REPROTECT_CONTEXT,*PREPROTECT_CONTEXT;NTSTATUSMmLockVaForWrite(__inPVOIDVa,__inULONGLength,__outPREPROTECT_CONTEXTReprotectContext){NTSTATUSStatus;Status=STATUS_SUCCESS;ReprotectContext->Mdl=0;ReprotectContext->LockedVa=0;ReprotectContext->Mdl=IoAllocateMdl(Va,Length,FALSE,FALSE,0);if(!ReprotectContext->Mdl){returnSTATUS_INSUFFICIENT_RESOURCES;}////RetrievealockedVAmapping.//__try{MmProbeAndLockPages(ReprotectContext->Mdl,KernelMode,IoModifyAccess);}__except(EXCEPTION_EXECUTE_HANDLER){returnGetExceptionCode();}ReprotectContext->LockedVa=(PUCHAR)MmMapLockedPagesSpecifyCache(ReprotectContext->Mdl,KernelMode,MmCached,0,FALSE,NormalPagePriority);if(!ReprotectContext->LockedVa){IoFreeMdl(ReprotectContext->Mdl);ReprotectContext->Mdl=0;returnSTATUS_ACCESS_VIOLATION;}////Reprotect.//Status=MmProtectMdlSystemAddress(ReprotectContext->Mdl,PAGE_EXECUTE_READWRITE);if(!NT_SUCCESS(Status)){MmUnmapLockedPages(ReprotectContext->LockedVa,ReprotectContext->Mdl);MmUnlockPages(ReprotectContext->Mdl);IoFreeMdl(ReprotectContext->Mdl);ReprotectContext->LockedVa=0;ReprotectContext->Mdl=0;}returnStatus;}NTSTATUSMmUnlockVaForWrite(__inPREPROTECT_CONTEXTReprotectContext){if(ReprotectContext->LockedVa){MmUnmapLockedPages(ReprotectContext->LockedVa,ReprotectContext->Mdl);MmUnlockPages(ReprotectContext->Mdl);IoFreeMdl(ReprotectContext->Mdl);ReprotectContext->LockedVa=0;ReprotectContext->Mdl=0;}returnSTATUS_SUCCESS;}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-19 12:41

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表