阅读:2538回复:1
KeSynchronizeExecution的使用?
BOOLEAN result = KeSynchronizeExecution(InterruptObject, SynchRoutine, Context);
上面这个同步执行函数KeSynchronizeExecution()的原理是什么,只知道是为了防止共享数据破坏。我下面问题想问: 1。KeSynchronizeExecution是应该放在派遣函数里面,还是ISR,或者DPC中? 2。是不是调用KeSynchronizeExecution,则SynchRoutine获取自旋锁,并提升其IRQL到对应的中断级,然后运行 3。是不是每一个需要访问SynchRoutine中访问的共享资源,就得调用KeSynchronizeExecution 本人是新手,对这个函数始终无法理解,望用过的兄弟帮忙提点,提点!不胜感激。 |
|
|
沙发#
发布于:2003-08-28 17:26
呵呵,我也是新手,以下是我的理解,仅作为参考:
通常在分发例程或StartIo例程里,需要访问一些资源,而这些资源在中断服务例程( ISR )中也需要使用,也就是说ISR和这些例程共享某些资源,因此必须考虑同步问题. ISR在运行时系统提供一个自旋锁,来保护ISR的运行(在DIRQL上 ) . 为了解决与ISR的同步问题,系统提供了KeSynchronizeExecution函数,使用这个函数可以获取该自旋锁并且提升到与ISR相同的中断级别上,在此基础上来运行KeSynchronizeExecution( )中指定的SynchRoutine.这样SynchRoutine就运行在与ISR相同的IRQL上,且拥有与中断关联的锁,因此,设备中断将被临时阻塞,SynchRoutine就可以自由地访问与ISR共享的资源. 这样你的问题就很显然了. :D :D |
|