知识点
1、内核中的时间用LAGER一个64位的数来表示,一般情况下有两种,有整数和负数。负数是相对时间,从现在起经过多久的一个相对时间。
2、-1010001000=1秒(s)
1秒(s)=1000毫秒(ms)=10001000微秒=100010001000纳秒
内核中基准单位是 100纳秒
所以10010=1000 100010001000=1秒
3、连续注册两个定时器,不需要启动,可以卡死PCHunter 的内核页面,这个是一个应用技巧
效果如下
4、有IO定时器和DPC定时器,DPC定时器可以精确控制函数执行时间,IO定时器是最快1秒执行一次
5、DPC定时可以实现异步执行,设置定时执行后,程序还会正常执行,等待到达设定的时间后才会执行DPC定时里面的函数。
6、 DISPATCHER_HEADER Header; 这个表示可以等待执行
7、KeSetTimer(&kerneltime,dpctime,NULL); 最后一个参数为空 ,可以实现一个超时等待,等待结束后不执行函数
IO定时器(最快每1秒执行一次)
初始化定时器,及启动定时器
//初始化io定时器
//driver 我们创建的设备
//TimerWork 定时器例程,就是我们要执行的函数
IoInitializeTimer(pdevice,TimerWork, NULL);
//启动定时器
IoStartTimer(pdevice);
定时器执行的函数,也就是定时器例程:
/// <summary>
/// IO定时器测试例程
/// </summary>
/// <param name="context"></param>
VOID TimerWork