WDK 8.1 Sample - Hardware Event Sample 学习总结

本文总结了WDK 8.1的Hardware Event Sample,重点讨论了驱动中处理竞争条件的策略,如CustomTimerDPC与EventCancelRoutine之间的关系,以及EventCleanup如何介入。文章强调理解驱动运行环境的重要性,并介绍了Remove Locks的用途和FILE_OBJECT.FsContext的意义。
摘要由CSDN通过智能技术生成

对这个例子的一些想法

现在回头在看 Hardware Event Sample 这个例子,它到底有哪些方面值得我们学习?我觉得就是驱动中对一些竞争条件的处理。换个说法讲,如果当我们的驱动面对这样的执行环境时,我们会考虑到这些竞争条件吗?我觉得考虑不到,那为什么考虑不到?说明我们对驱动所处的运行环境的理解还是不够,说白了就是对内核的学习,理解不够。相比较,假如这是一个应用程序,我们是绝对可以考虑的这些竞争条件的。

下面是对这个例子中竞争条件处理的一个总结。

  • CustomTimerDPC 和 EventCancelRoutine 之间的可能竞争关系

    1. CustomTimerDPC 先获取 SpinLock,但在尚未调用 IoCompleteRequest 完成IRP之前,IRP 被 Cancel,于是 EventCancelRoutine 开始运行并阻塞于 SpinLock
    2. 在定时器触发之前,IRP 被 Cancel,于是 EventCancelRoutine 先获取 SpinLock,但在 EventCancelRoutine 取消定时器之前,定时器触发,于是 CustomTimerDPC 运行并阻塞于SpinLock
    3. CustomTimer 和 EventCancelRoutine 各自运行期间,对方都没有运行。
  • EventCleanup 与 CustomTimerDPC 和 EventCancelRoutine 之间的可能竞争关系

    1. EventCleanup 先获取 SpinLock,但在取消定时器之前,定时器触发,于是 CustomTimerDPC 开始运行并阻塞于 SpinLock
    2. EventCl
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值