首页
社区
课程
招聘
[求助]Win2003下枚举DPC定时器蓝屏!!
发表于: 2014-2-20 19:42 3758

[求助]Win2003下枚举DPC定时器蓝屏!!

2014-2-20 19:42
3758
枚举DPC定时器的关键是定位 KiTimerTableListHead (DPC定时器数组)
WinXP下这个数组元素有256个
Win2003下这个数组元素有512个

定位到KiTimerTableListHead后,遍历它即可

        //这里获取到的KiTimerTableListHead的地址打印出来是对的,到这里没问题不蓝屏

        //遍历KiTimerTableListHead数组得到所有DPC定时器

        //下面代码蓝屏,和WinXP下比只改动了一处

        irql = KeRaiseIrqlToDpcLevel();
       
        for(j = 0; j < 0x200; j++)  //只改动这里,j为数组元素个数,WinXP下把0x200换成0x100就能正确枚举出来
        {
                pnode = (LIST_ENTRY *)(addr + j * 8);  //addr为KiTimerTableListHead地址
                pnext = pnode->Blink;
               
                while(pnext != pnode)
                {
                        PKTIMER ptimer = CONTAINING_RECORD(pnext, KTIMER, TimerListEntry);
                       
                        if(MmIsAddressValid(ptimer) && MmIsAddressValid(ptimer->Dpc) && MmIsAddressValid(ptimer->Dpc->DeferredRoutine))  //过滤
                        {
                                routine = (ULONG)ptimer->Dpc->DeferredRoutine;
                                DbgPrint("DPC Timer对象: 0x%X 入口地址: 0x%X", (ULONG)ptimer, routine);
                        }
                       
                        pnext = pnext->Blink;  //调试发现蓝屏在这行,WinXP下没问题
                }

        }
       
        KeLowerIrql(irql);

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 209
活跃值: (813)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
吐槽下:
这个东东卡了10来天终于自己解决了,想进一步真不容易啊!
还是基础太差!

就此结贴!
2014-2-25 00:29
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
根据出错位置目测,莫非win2003下的DPC定时器有单向链表?
2014-2-25 01:53
0
游客
登录 | 注册 方可回帖
返回
//