阅读:1261回复:5
wdm中的定时器问题(急)
我定制了一个定时器程序,代码如下:
KTIMER* kTimer;//= new (NonPagedPool); // kTimer=(KTIMER *)ExAllocatePool(NonPagedPool,100); ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL); // PKDPC dpc; t << \"Entering LpTestDevice::Device Control, \" << I << EOL; ULONG fwLength=0; switch (I.IoctlCode()) { case BA_TIMER://启动定时器 { LARGE_INTEGER DueTime={0}; KeInitializeTimerEx(kTimer, SynchronizationTimer); KeInitializeDpc(kTimer->Dpc,TimerProcFunction,NULL); KeSetTimerEx(kTimer,DueTime,POLLING_INTERVAL,kTimer->Dpc); } break; case 0x0004: KeCancelTimer(kTimer);//取消定时器 KeRemoveQueueDpc(kTimer->Dpc); ExFreePool(kTimer); break; } 其回掉函数如下: VOID TimerProcFunction(PKDPC dpc, PVOID context, PVOID junk1, PVOID junk2) { t << \"TimerProcFunction\\n\"; } 运行后能够实现按要求定时,但当上层程序执行case0x0004时或关闭驱动程序句柄时,计算机蓝屏重新启动。试了很多遍没有结果,恳请各位指导,给出改正代码。 |
|
沙发#
发布于:2003-04-26 09:08
help me,I will give you my completed code in VC if you need.
|
|
板凳#
发布于:2003-04-26 09:09
太急了,帮帮忙吧
|
|
地板#
发布于:2003-04-26 11:08
跟一下看究竟是哪段代码引起的蓝屏
|
|
|
地下室#
发布于:2003-04-26 13:32
KeCancelTimer
If a DPC object is associated with the timer, it too is canceled. 把KeRemoveQueueDpc(kTimer->Dpc);注释掉看看? |
|
5楼#
发布于:2003-04-26 13:38
悄悄问一下:以上代码都是在同一个函数里边实现的吗?
如果是,则蓝屏是正常的,否则反而不正常了 :D :D :D 建议仔细看一下KeInitializeTimerEx()的说明。 |
|