首页
社区
课程
招聘
[原创]纠正天书夜读中KeSetTimer例子的一点小错误,顺便贴上自己对KeSetTimer的封装代码
发表于: 2011-3-8 22:26 11450

[原创]纠正天书夜读中KeSetTimer例子的一点小错误,顺便贴上自己对KeSetTimer的封装代码

2011-3-8 22:26
11450
    BOOLEAN MyTimerSet(PMY_TIMER timer,ULONG msec,PVOID context)
    {
      LARGE_INTERGE due;
      due.QuadPart = -10000 * msec;    [B][COLOR="Red"]//这是问题代码,msec是ULONG型的,这是无符号运算,结果为正数[/COLOR][/B]
      timer->Private_context = context;
      return KeSetTimer(&timer->timer,due,&timer->dpc);
    };
    BOOLEAN MyTimerSet(PMYTIMER pMyTimer)
    {
      LARGE_INTEGER DueTime;
      DueTime.QuadPart = -10000 * pMyTimer->WaitTime;   [COLOR="Red"][B]//WaitTime是ULONG型的,也存在同样的问题[/B][/COLOR]
      return KeSetTimer(&pMyTimer->KTimer,DueTime,&pMyTimer->KDpc);
    }
    fad45266 8b4508          mov     eax,dword ptr [ebp+8] ss:0010:fadefc24={MyDriverTest!MyTimer (fad47000)}
    fad45269 8b484c          mov     ecx,dword ptr [eax+4Ch]
    fad4526c 69c9f0d8ffff    imul    ecx,ecx,0FFFFD8F0h       ;-10000 * pMyTimer->WaitTime
    fad45272 33d2            xor     edx,edx                  ;运算高32位清0
    fad45274 894df8          mov     dword ptr [ebp-8],ecx    ;运算低32位存放在DueTime.LowPart
    fad45277 8955fc          mov     dword ptr [ebp-4],edx    ;DueTime.HighPart = 0,很明显结果总是正数

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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
很好 不错
2011-3-10 08:37
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
BOOLEAN MyTimerSet(PMY_TIMER timer,ULONG msec,PVOID context)  这里直接定义LONG不行吗?
2011-3-10 08:39
0
雪    币: 216
活跃值: (144)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
4
嗯嗯~,主要是考虑到传入的是毫秒数,一定为正数~,LONG的话,如果用户传入一个负数的话就造成错误了。所以用了ULONG~~~。见笑了~
2011-3-10 12:53
0
雪    币: 34
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
DueTime
Specifies the absolute or relative time at which the timer is to expire. If the value of the DueTime parameter is negative, the expiration time is relative to the current system time. Otherwise, the expiration time is absolute. The expiration time is expressed in system time units (100-nanosecond intervals). Absolute expiration times track any changes in the system time; relative expiration times are not affected by system time changes.
2011-3-10 13:32
0
雪    币: 34
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
人家是正确的~
2011-3-10 13:33
0
雪    币: 216
活跃值: (144)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
7
其实我想表达的是due.QuadPart = -10000 * msec这个运算结果只能是正数~
2011-3-10 18:26
0
雪    币: 236
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
收藏,感谢分享
2011-3-26 11:01
0
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
9
VOID fnSetTimer()
{
	LARGE_INTEGER Due;
	int s = -10000;
	int x = 5000;
	Due.QuadPart = s * x;
	KeSetTimer(timer, Due, dpc);
}

    7 f8ad8490 8bff            mov     edi,edi
    7 f8ad8492 55              push    ebp
    7 f8ad8493 8bec            mov     ebp,esp
    7 f8ad8495 83ec10          sub     esp,10h
    9 f8ad8498 c745f8f0d8ffff  mov     dword ptr [ebp-8],0FFFFD8F0h
   10 f8ad849f c745fc88130000  mov     dword ptr [ebp-4],1388h
   11 f8ad84a6 8b45f8          mov     eax,dword ptr [ebp-8]
   11 f8ad84a9 0faf45fc        imul    eax,dword ptr [ebp-4]
   11 f8ad84ad 99              cdq
   11 f8ad84ae 8945f0          mov     dword ptr [ebp-10h],eax
   11 f8ad84b1 8955f4          mov     dword ptr [ebp-0Ch],edx
   12 f8ad84b4 a10c87adf8      mov     eax,dword ptr [DriverTest!dpc (f8ad870c)]
   12 f8ad84b9 50              push    eax
   12 f8ad84ba 8b4df4          mov     ecx,dword ptr [ebp-0Ch]
   12 f8ad84bd 51              push    ecx
   12 f8ad84be 8b55f0          mov     edx,dword ptr [ebp-10h]
   12 f8ad84c1 52              push    edx
   12 f8ad84c2 a10887adf8      mov     eax,dword ptr [DriverTest!timer (f8ad8708)]
   12 f8ad84c7 50              push    eax
   12 f8ad84c8 ff150086adf8    call    dword ptr [DriverTest!_imp__KeSetTimer (f8ad8600)]
   14 f8ad84ce 8be5            mov     esp,ebp
   14 f8ad84d0 5d              pop     ebp
   14 f8ad84d1 c3              ret

人家是对的
2011-11-14 20:43
0
雪    币: 96
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
一如既往的支持!
2011-11-14 21:12
0
游客
登录 | 注册 方可回帖
返回
//