| 
					阅读:1336回复: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 13:38 
					悄悄问一下:以上代码都是在同一个函数里边实现的吗?
 如果是,则蓝屏是正常的,否则反而不正常了 :D :D :D 建议仔细看一下KeInitializeTimerEx()的说明。 | |
| 板凳#发布于:2003-04-26 13:32 
					KeCancelTimer
 If a DPC object is associated with the timer, it too is canceled. 把KeRemoveQueueDpc(kTimer->Dpc);注释掉看看? | |
| 地板#发布于:2003-04-26 11:08 
					跟一下看究竟是哪段代码引起的蓝屏				 | |
| 
 | 
| 地下室#发布于:2003-04-26 09:09 
					太急了,帮帮忙吧  				 | |
| 5楼#发布于:2003-04-26 09:08 
					help me,I will give you my completed code in VC if you need.  				 | |
 
							
 
				 
				 
				
