阅读:2321回复:12
关于DDK中KeInitializeTimer用法问题,以及SoftIce调试问题
我在写一个Kenerl Mode软驱动程序时,需要设置一个TImer,我的写法时这样的
TimeoutTime.QuadPart = (-10000 * 1000 * devExt-DiskRegInfo.AutoSaveImageTTL); KeInitializeTimerEx(&devExt->Timer, SynchronizationTimer); KeInitializeDpc(&devExt->TimerDpc, WriteImageTimerDpc, DriverObject); KeSetTimerEx(&devExt->Timer, TimeoutTime, MAXLONG, &devExt->TimerDpc); 可是一运行就出现内存分页错误,有没有高手知道如何解决?? 还有一个问题就是SoftIce调试问题,当我的驱动出现问题的时候,SoftIce截获到错误后,该如何处理?我一按F10运行下去,WIN2000就出现了蓝屏Dump了。 |
|
最新喜欢:flyfox |
沙发#
发布于:2003-03-26 22:19
没有人关注?
|
|
板凳#
发布于:2003-03-27 09:05
DPC回调例程是运行在dispatch level上的,出现分页错误很正常。如果你需要时钟回调的机制的话,你还是起一个线程,在线程中使用kewaitforsingleobject的办法等一段时间,超时后调用你的回调函数,这样就不会出现Irql变化的问题,祝你好运
|
|
|
地板#
发布于:2003-03-27 09:08
你的超时时间的计算方法也不对,你应该使用int32*32这个函数,函数名可能不准,你到MSDN核对一下
|
|
|
地下室#
发布于:2003-03-27 13:07
计时器对象你必须自己为它分配内存,然后再初始化,初始化函数是不负责分配内存的。
|
|
|
5楼#
发布于:2003-03-27 13:11
HBOOT
|
|
|
6楼#
发布于:2003-03-27 13:46
收到,谢谢各位。
|
|
7楼#
发布于:2003-03-27 17:06
GettingStart的回答有问题吧?高于Dispatch_Level是不会有分页内存错误的,这里的关键是Timer没有初始化。
|
|
|
8楼#
发布于:2003-03-28 09:43
Timer 肯定做了初始化了,但是一样会死机,
我的定时器设置的是30s,如果Timer没有初始化,我觉得在 KeInitializeTimerEx(&devExt->Timer, SynchronizationTimer);语句的时候就会出错了,但是我是到DPC例程中才出现错误的。 |
|
9楼#
发布于:2003-03-28 10:35
你还是在你的dpc例程查一查有没有使用不允许在dispatch level上使用的函数。
至于楼上的那位的疑问我看你还是去查以下资料吧,造成分页错误的一个原因就是和dispatch level有关的,为了检查这个问题,ddk还提供了一个宏paged-code用来调试这个问题 |
|
|
10楼#
发布于:2003-03-29 10:27
GettingStart的回答有问题吧?高于Dispatch_Level是不会有分页内存错误的,这里的关键是Timer没有初始化。 很多蓝屏就是因为在dispatch level或以上产生了page fault,而系统无法处理。 |
|
11楼#
发布于:2003-03-29 11:26
那么请问,我如何知道我的DPC历程上哪些函数不允许在dispatch level上使用的??
我买了一本《WIN2000设备驱动程序设计指南》 施诺翻译的,感觉很差,看不懂DPC机制。有没有人给出一个资料?? DPC历程上为什么不允许在dispatch level或者更高的IRQL上运行,我还是不清楚。 |
|
12楼#
发布于:2003-03-29 21:11
那么请问,我如何知道我的DPC历程上哪些函数不允许在dispatch level上使用的?? 那本书是不差的,就是翻译的。。。XXX DPC历程上为什么不允许在dispatch level或者更高的IRQL上运行, ???不懂说的什么。 [编辑 - 3/29/03 by arthurtu] |
|