微型驱动程序同步

流式处理微型驱动程序开发人员可以选择允许类驱动程序处理同步。 当微型驱动程序向类驱动程序注册自己时,可以通过将 HW_INITIALIZATION_DATATurnOffSynchronization 成员设置为 FALSE 来选择类驱动程序提供的同步。

当类驱动程序处理同步时,它会确保微型驱动程序代码的两个部分永远不会同时执行。 类驱动程序将所有流请求排队,并将它们一次传递给微型驱动程序。

此同步的一个用途是使微型驱动程序编写器不必在多任务、可重入、多处理器环境中处理驱动程序同步和请求队列的所有详细信息。 但是,某些微型驱动程序不应使用它。 同步示例主题中提供了两个示例,这些示例演示了微型驱动程序在同步方面需要执行的操作。

关闭流类同步意味着所有请求都会立即以异步方式调用到PASSIVE_LEVEL提交线程上下文中的微型驱动程序。 上述规则的例外情况是 HwCancelPacket、TimeoutHandler 和 Timer 例程。 这些在DISPATCH_LEVEL调用。 最后一个异常是在 DIRQL 中调用的中断处理程序。

关闭同步时,微型驱动程序负责按照 WDM 模型执行同步。 如果在PASSIVE_LEVEL重新调用微型驱动程序,则它会被任何更高的 IRQL 事件(如 DPC 或中断)抢占。 同样,如果在DISPATCH_LEVEL调用微型驱动程序,则随后可能会被中断抢占。 操作共享资源的微型驱动程序函数必须同步访问。

当流类同步关闭时,可以同时向相同或不同的流发出多个请求。 微型驱动程序必须将自己的请求排队,并处理与其他线程和 ISR 的任何硬件同步。 旋转锁、互斥锁和 KeSynchronizeExecution 是一些同步对象,可用于流式处理在没有流类同步的情况下运行的微型驱动程序。