首页
社区
课程
招聘
[求助]关于内存清0
发表于: 2009-8-5 16:00 4074

[求助]关于内存清0

2009-8-5 16:00
4074
//蓝屏版内存清0
VOID ZeroIt(PEPROCESS pProcess){
        ULONG start;
        KAPC_STATE kapc;
        KeStackAttachProcess(pProcess,&kapc);
        for(start=0x00010000;start<0x60000000;start+=0x1000){
                __try{
                        ProbeForWrite((PVOID)start,0x1000,4);
                        RtlZeroMemory((PVOID)start,0x1000);
                }__except(1){
                        continue;
                }        
        }
        KeUnstackDetachProcess (&kapc);
}

//不蓝屏版内存清0
VOID ZeroIt(PEPROCESS pProcess){
        ULONG start,tmp;
        KAPC_STATE kapc;
        PHYSICAL_ADDRESS physicalAddr;

        KeStackAttachProcess(pProcess,&kapc);

        for(start=0x00010000;start< 0x60000000;start+=0x1000){
                physicalAddr = MmGetPhysicalAddress((PVOID)start);
                if( physicalAddr.HighPart > g_PhysicalPage.HighPart )
                        continue;
                if( physicalAddr.HighPart == g_PhysicalPage.HighPart &&
                        physicalAddr.LowPart >= g_PhysicalPage.LowPart   )
                        continue;
                if ( !(physicalAddr.HighPart | physicalAddr.LowPart) )
                        continue;
                if(start!=(ULONG)MmGetVirtualForPhysical(physicalAddr))
                        continue;
                
                __asm {
                        cli;
                        mov eax,cr0;
                        and eax,not 10000h;
                        mov cr0,eax;
                }
                __try{
                        RtlZeroMemory( (PVOID)start, 0x1000);
                }__except(1){
                }
                __asm {
                        mov  eax,cr0
                        or   eax,10000h
                        mov  cr0,eax
                        sti
                }
        }

        KeUnstackDetachProcess (&kapc);
}


提问:
为什么第一个函数会蓝屏呢?不是用ProbeForWrite验证过了吗?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
是验证了,但是你验证返回值了吗?雷…
2009-8-5 17:16
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
3
放在 try 块里的呀,ProbeForWrite 哪来的返回值? ?
2009-8-5 17:48
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
sorry,记错了,跟另一个XX函数搞混了,try也不是万能的啊
2009-8-5 20:03
0
游客
登录 | 注册 方可回帖
返回
//