cxtcxtcxt
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2007-07-26
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:3189回复:7

请教ndis定时器的问题

楼主#
更多 发布于:2007-03-28 11:07
  翻看了好多帖子,发现有一些也是讨论定时器的问题,后来问题也都解决了,也看了msdn的相关文档,还是无法发现自己代码的问题。
    在中间层驱动代码passthru中设置定时器,

NDIS_TIMER timer; //全局变量定时器

//在driverentry中初始化
NdisInitializeTimer( &timer, func, NULL );
NdisSetTimer( &timer, 1000 );


//在unload中释放资源
BOOLEAN Canceled ;
NdisCancelTimer( &timer, &Canceled );

 
    现在是只要执行NdisSetTimer( &timer, 1000 );这一条语句,系统就会死机,不管是在driverentry中执行还是在别的地方执行都死机,在driverentry中执行就会导致系统无法启动,但是只要不执行NdisSetTimer( &timer, 1000 );则其它功能一切正常。
    看了一些资料,无法确定有什么问题,郁闷……
    请高人指点
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-03-28 11:24
你的TimeFun要在IRQL DISPATCH_LEVEL上运行,检查一下你的代码,不要做访问分页内存等动作
cxtcxtcxt
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2007-07-26
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-28 14:25
谢谢指点。
有访问内存的操作,但是都是使用NdisAllocateMemoryWithTag分配的,应该都不是分配内存的操作,但是在定时器的Timefunc中有NdisAcquireSpinlock的操作,是这个有问题吗?
burgess
驱动牛犊
驱动牛犊
  • 注册日期2007-03-18
  • 最后登录2008-04-26
  • 粉丝0
  • 关注0
  • 积分310分
  • 威望32点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-28 17:40
据我所知NdisAcquireSpinlock应该是取得权限的,可以试试把定时器放到NdisAcquireSpinlock它结束之后
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2007-03-29 10:46
定时器函数中是可以调用NdisAcquireSpinlock。用windbg看一下蓝屏文件,是什么错误,哪一行代码引起的
bacongong
驱动牛犊
驱动牛犊
  • 注册日期2007-10-10
  • 最后登录2009-01-12
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望31点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-05-24 20:11
引用第1楼zhaock于2007-03-28 11:24发表的  :
你的TimeFun要在IRQL DISPATCH_LEVEL上运行,检查一下你的代码,不要做访问分页内存等动作



如何确保timefun在 dpc级别上运行?请指教
驱网无线,快乐无限
olympicsir
驱动牛犊
驱动牛犊
  • 注册日期2007-06-25
  • 最后登录2009-01-20
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-09-11 10:43
    sd
smilebear
驱动牛犊
驱动牛犊
  • 注册日期2002-06-14
  • 最后登录2010-06-24
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望38点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-09-12 16:25
zhaock的意思应该是:
TimeFun在IRQL DISPATCH_LEVEL上运行是OS帮你保证的,
你要保证的是在TimerFun里不要做IRQL DISPATCH_LEVEL上不能做的操作。

用windbg指定正确的symbol file来双机debug或者看蓝屏后的dump文件,找到错误代码的行数,才是解决蓝屏问题更通用的方法。
游客

返回顶部