学习windows驱动(对象同步)

对象是一种会被争抢的共享资源,因此就要为它设置同步机制。框架对象内部包含了同步锁机制。
可以通过WdfObjectAcquireLock 和WdfObjectReleaseLock实现手动同步。简单方面的做法是采用自动同步机制。

采用自动同步,先是确定同步范围,有两种可选同步范围:
设备同步(WdfSynchronizationScopeDevice)、队列同步(WdfSynckronizationScopeQueue)。
当选择设备同步时,设备上的队列和文件对象,同时只能有一个对象的一个事件回调被执行;当选择队列同步,在同一时刻,每个队列只有一个事件回调被执行。如果不选同步范围,就是不同步(WdfSynchronizationScopeNone),这种情况下,同一时刻可以有任意个事件回调被执行。
自动同步的原理是:
设备同步,所有下属队列或文件对象的事件回调执行前,必须申请设备对象同步锁;队列同步,队列中事件执行前,必须申请此队列对象的同步锁。如果不选同步范围,就不必申请同步锁。

采用自动同步,其次是设定运行级别,运行级别决定事件回调最高可在哪个中断级别(IRQL)上执行。可选的值有PASSIVE_LEVEL(WdfExecutionLevelPassive)和更高级别DISPATCH_LEVEL(WdfExecutionLevelDispatch)。通过WdfExecutionLevelDispatch设置子设备从父设备继承这个属性,这个属性对应结构体WDF_OBJECT_ATTRIBUTES的ExecutionLevel变量。
对于设备对象的PNP/Power事件回调,驱动总是实施同步调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值