Windows驱动编程基础教程(5.3)
5.3 使用定时器
使用过Windows应用程序编程的读者的读者一定对SetTimer()映像尤深。当需要定时执行任务的时候,SetTimer()变得非常重要。这个功能在驱动开发中可以通过一些不同的替代方法来实现。比较经典的对应是KeSetTimer(),这个函数的原型如下:
BOOLEAN
KeSetTimer(
IN PKTIMER Timer, // 定时器
IN LARGE_INTEGER DueTime, // 延后执行的时间
IN PKDPC Dpc OPTIONAL // 要执行的回调函数结构
);
其中的定时器Timer和要执行的回调函数结构Dpc都必须先初始化。其中Timer的初始化比较简单。下面的代码可以初始化一个Timer:
KTIMER my_timer;
KeInitializeTimer(&my_timer);
Dpc的初始化比较麻烦。这是因为需要提供一个回调函数。初始化Dpc的函数原型如下:
VOID
KeInitializeDpc(
IN PRKDPC Dpc,
IN PKDEFERRED_ROUTINE DeferredRoutine,
IN PVOID DeferredContext
);
PKDEFERRED_ROUTINE这个函数指针类型所对应的函数的类型实际上是这样的:
VOID
CustomDpc(
IN struct _KDPC *Dpc,
IN PVOID DeferredContext,
IN PVOID SystemArgument1,
IN PVOID SystemArgument2
);
读者需要关心的只是DeferredContext。这个参数是KeInitializeDpc调用时传入的参数。用来提供给CustomDpc被调用的时候,让用户传入一些参数。
至于后面的SystemArgument1和SystemArgument2则请不要理会。Dpc是回调这个函数的KDPC结构。
Windows驱动编程基础教程(连载9)
作者:楚狂人时间:08-06-04
- 最新文章
- 内核级HOOK的几种实现与应用
- 实现内核级HOOK对于拦截、分析、跟踪系统内核起着致关重要的作用。实现的方法不...
- Windows平台内核级文件访问
- 1.背景 在windows平台下,应用程序通常使用API函数来进行文件访问,创建,打开,...
- 相关文章
- Windows平台内核级文件访问
- 1.背景 在windows平台下,应用程序通常使用API函数来进行文件访问,创建,打开,...
- Windows驱动编程基础教程(连载11)
- Windows驱动编程基础教程(6.3) 6.3 使用事件通知 一些读者可能熟悉事件驱...
热门关注







