内核中使用定时器

本文介绍了内核中时间的表示方式,包括绝对和相对时间,并探讨了两种类型的定时器——IO定时器(每秒执行一次)和DPC定时器。DPC定时器允许精确控制函数执行时间并实现异步执行,而IO定时器至少每秒触发一次。通过实验展示了如何设置、启动和取消DPC定时器,以及它们在内核操作中的应用。
摘要由CSDN通过智能技术生成
知识点

1、内核中的时间用LAGER一个64位的数来表示,一般情况下有两种,有整数和负数。负数是相对时间,从现在起经过多久的一个相对时间。

2、-1010001000=1秒(s)
1秒(s)=1000毫秒(ms)=10001000微秒=100010001000纳秒
内核中基准单位是 100纳秒
所以100
10=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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值