亲,你还没有登陆哦,无法享受到更多服务的,马上登陆。如果还没有帐号,请立即注册!X
查看: 581|回复: 4

求助:有关SSDT写保护的修改问题 [复制链接]

Rank: 1

发表于 2012-1-20 19:53:40 |显示全部楼层
  1. //关闭可写
  2. VOID DisableWriteProtect(ULONG oldAttr)
  3. {
  4.         _asm
  5.         {
  6.                 mov eax, oldAttr;
  7.                 mov cr0,eax;
  8.                 sti;
  9.         }
  10. }
  11. //打开可写
  12. VOID EnableWriteProtect(PULONG pOldAttr)
  13. {
  14.         ULONG uAttr;
  15.         _asm
  16.         {
  17.                 cli;
  18.                 mov  eax, cr0;
  19.                 mov  uAttr, eax;
  20.                 and  eax, 0FFFEFFFFh; // CR0 16 BIT = 0
  21.                 mov  cr0, eax;
  22.         }
  23.         *pOldAttr = uAttr;
  24. }
复制代码
这个是我从网上借用的修改写保护的代码
可是  用这个时候竟然蓝了....我注释掉调用这句的时候 驱动有正常了
我很纠结
用自己的代码也不行
在从网上找了另一个代码
还是蓝= =
我很纠结
以前还得的
我不知道是为啥
请问各位大牛到底是怎么回事呢?
我在baidu和google都没找到合适的资料

Rank: 1

发表于 2012-1-21 15:49:53 |显示全部楼层
本帖最后由 xed 于 2012-1-21 15:50 编辑

pushad
pushfd
.
.
.
popf
popa
试试,你可能操作了eax。

Rank: 1

发表于 2012-1-25 09:36:58 |显示全部楼层
VOID CloseMemoryProtect() //去掉页面保护
{
        __asm
        {
                cli
                mov eax,cr0
                and eax,not 10000h
                mov cr0,eax
        }
}

VOID OpenMemoryProtect() //恢复页面保护
{
        __asm
        {
                mov eax,cr0
                or  eax,10000h
                mov cr0,eax
                sti
        }
}

Rank: 1

发表于 2012-1-29 14:13:14 |显示全部楼层
会不会是设置CR0的时候产生了中断呀。

Rank: 1

发表于 2012-1-31 14:28:17 |显示全部楼层
蓝屏问题与这段去掉写保护的代码绝对不可能有任何关系。。。。你自己的其它代码有bug而已

再者,这种龌龊的去掉写保护的方式,也不值得用

应该先用要写的那个地址,新建一个mdl,然后用IoWriteAccess参数lock pages,然后MmGetSystemAddressForMdlSafe得到新的一个可写的地址

用完后记得释放就是了
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人

GMT+8, 2012-2-23 12:30 , Processed in 0.050930 second(s), 10 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部