Claye
驱动牛犊
驱动牛犊
  • 注册日期2002-11-24
  • 最后登录2007-10-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2538回复:1

KeSynchronizeExecution的使用?

楼主#
更多 发布于:2003-08-28 15:08
BOOLEAN result = KeSynchronizeExecution(InterruptObject, SynchRoutine, Context);
上面这个同步执行函数KeSynchronizeExecution()的原理是什么,只知道是为了防止共享数据破坏。我下面问题想问:
1。KeSynchronizeExecution是应该放在派遣函数里面,还是ISR,或者DPC中?
2。是不是调用KeSynchronizeExecution,则SynchRoutine获取自旋锁,并提升其IRQL到对应的中断级,然后运行
3。是不是每一个需要访问SynchRoutine中访问的共享资源,就得调用KeSynchronizeExecution

本人是新手,对这个函数始终无法理解,望用过的兄弟帮忙提点,提点!不胜感激。
因为有了你的驱动,我们才能进步! 愿中国强大!!!!
whistlezl
驱动小牛
驱动小牛
  • 注册日期2003-01-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-28 17:26
呵呵,我也是新手,以下是我的理解,仅作为参考:
    通常在分发例程或StartIo例程里,需要访问一些资源,而这些资源在中断服务例程( ISR )中也需要使用,也就是说ISR和这些例程共享某些资源,因此必须考虑同步问题.
    ISR在运行时系统提供一个自旋锁,来保护ISR的运行(在DIRQL上 ) .
    为了解决与ISR的同步问题,系统提供了KeSynchronizeExecution函数,使用这个函数可以获取该自旋锁并且提升到与ISR相同的中断级别上,在此基础上来运行KeSynchronizeExecution( )中指定的SynchRoutine.这样SynchRoutine就运行在与ISR相同的IRQL上,且拥有与中断关联的锁,因此,设备中断将被临时阻塞,SynchRoutine就可以自由地访问与ISR共享的资源.

这样你的问题就很显然了. :D :D

    
游客

返回顶部