阅读:2351回复:0
DriverNetwork miniport驱动学习(6)
使用定时器
KNdisTimer 类为所有网络驱动程序使用NDIS定时器服务提供了一个统一的方法。 NDIS定时器服务(Ndis[M]SetTimer)允许网络驱动在规定的毫秒时间之后重新回调。除非请求被取消(Ndis[M]CancelTimer),NDIS在DISPATCH_LEVEL级上调用专有的静态回调函数(原型:PNDIS_TIMER_FUNCTION)。 DriverNetworks允许定时器用在用户adapter类中(例如,调定时回调一个adapter类的成员函数)。 对于NDIS miniport 和 intermediate驱动,KNdisTimer对象常常作为数据成员编译到KNdisMiniAdapter派生类或者KNdisFilterAdapter派生类中。在定时器对象使用之前,必须使用KNdisTimer:Initialize()方法对其初始化。初始化过程在基本NDIS定时器对象和特定成员函数之间建立关联。定时器初始化工作应该在adapter的Initialize()处理程序中完成(例如,KNdisMiniAdapter::Initialize())。成功初始化之后,定时器的使用方法有:KNdisTimer::Set()和KNdisTimer::Cancel()。 KNdisTimer的编程顺序如下: 1. 在类(KNdisMiniAdapter派生类)中声明一个定时器对象。 2. 用KNDIS_DECLARE_TIMERCALLBACK宏声明一个成员定时器溢出回调。 3. 在Initialize()处理程序中用KNDIS_MEMBER_CALLBACK宏初始化定时器。 4. 实现回调成员函数,原型:void Timeout()。 |
|