您的位置:首页 > 其它

学习windows驱动(对象同步)

2015-10-27 17:40 330 查看
对象是一种会被争抢的共享资源,因此就要为它设置同步机制。框架对象内部包含了同步锁机制。

可以通过WdfObjectAcquireLock 和WdfObjectReleaseLock实现手动同步。简单方面的做法是采用自动同步机制。

采用自动同步,先是确定同步范围,有两种可选同步范围:

设备同步(WdfSynchronizationScopeDevice)、队列同步(WdfSynckronizationScopeQueue)。

当选择设备同步时,设备上的队列和文件对象,同时只能有一个对象的一个事件回调被执行;当选择队列同步,在同一时刻,每个队列只有一个事件回调被执行。如果不选同步范围,就是不同步(WdfSynchronizationScopeNone),这种情况下,同一时刻可以有任意个事件回调被执行。

自动同步的原理是:

设备同步,所有下属队列或文件对象的事件回调执行前,必须申请设备对象同步锁;队列同步,队列中事件执行前,必须申请此队列对象的同步锁。如果不选同步范围,就不必申请同步锁。

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

对于设备对象的PNP/Power事件回调,驱动总是实施同步调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: