ychener
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:2321回复:12

关于DDK中KeInitializeTimer用法问题,以及SoftIce调试问题

楼主#
更多 发布于:2003-03-26 20:47
我在写一个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了。

最新喜欢:

flyfoxflyfox
ychener
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-26 22:19
没有人关注?
GettingStart
驱动牛犊
驱动牛犊
  • 注册日期2002-12-27
  • 最后登录2003-08-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-27 09:05
DPC回调例程是运行在dispatch level上的,出现分页错误很正常。如果你需要时钟回调的机制的话,你还是起一个线程,在线程中使用kewaitforsingleobject的办法等一段时间,超时后调用你的回调函数,这样就不会出现Irql变化的问题,祝你好运
至尊宝
GettingStart
驱动牛犊
驱动牛犊
  • 注册日期2002-12-27
  • 最后登录2003-08-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-27 09:08
你的超时时间的计算方法也不对,你应该使用int32*32这个函数,函数名可能不准,你到MSDN核对一下
至尊宝
GettingStart
驱动牛犊
驱动牛犊
  • 注册日期2002-12-27
  • 最后登录2003-08-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-27 13:07
计时器对象你必须自己为它分配内存,然后再初始化,初始化函数是不负责分配内存的。
至尊宝
GettingStart
驱动牛犊
驱动牛犊
  • 注册日期2002-12-27
  • 最后登录2003-08-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-27 13:11
HBOOT
至尊宝
ychener
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-27 13:46
收到,谢谢各位。
xyyln
驱动老牛
驱动老牛
  • 注册日期2003-01-02
  • 最后登录2009-12-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-27 17:06
GettingStart的回答有问题吧?高于Dispatch_Level是不会有分页内存错误的,这里的关键是Timer没有初始化。
[img]http://www.jt99.com/zjbbs/UploadFile/2003113018513643830.gif[/img]
ychener
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-28 09:43
Timer 肯定做了初始化了,但是一样会死机,
我的定时器设置的是30s,如果Timer没有初始化,我觉得在
KeInitializeTimerEx(&devExt->Timer, SynchronizationTimer);语句的时候就会出错了,但是我是到DPC例程中才出现错误的。
GettingStart
驱动牛犊
驱动牛犊
  • 注册日期2002-12-27
  • 最后登录2003-08-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-28 10:35
你还是在你的dpc例程查一查有没有使用不允许在dispatch level上使用的函数。
至于楼上的那位的疑问我看你还是去查以下资料吧,造成分页错误的一个原因就是和dispatch level有关的,为了检查这个问题,ddk还提供了一个宏paged-code用来调试这个问题
至尊宝
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2003-03-29 10:27
GettingStart的回答有问题吧?高于Dispatch_Level是不会有分页内存错误的,这里的关键是Timer没有初始化。
 

很多蓝屏就是因为在dispatch level或以上产生了page fault,而系统无法处理。
ychener
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-03-29 11:26
那么请问,我如何知道我的DPC历程上哪些函数不允许在dispatch level上使用的??

我买了一本《WIN2000设备驱动程序设计指南》 施诺翻译的,感觉很差,看不懂DPC机制。有没有人给出一个资料??

DPC历程上为什么不允许在dispatch level或者更高的IRQL上运行,我还是不清楚。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2003-03-29 21:11
那么请问,我如何知道我的DPC历程上哪些函数不允许在dispatch level上使用的??

我买了一本《WIN2000设备驱动程序设计指南》 施诺翻译的,感觉很差,看不懂DPC机制。有没有人给出一个资料??

DPC历程上为什么不允许在dispatch level或者更高的IRQL上运行,我还是不清楚。

那本书是不差的,就是翻译的。。。XXX

DPC历程上为什么不允许在dispatch level或者更高的IRQL上运行,

???不懂说的什么。

[编辑 -  3/29/03 by  arthurtu]
游客

返回顶部