同步和线程 DPC

若要同步访问 CustomThreadedDpc 例程内外的内存位置,驱动程序可以使用普通自旋锁或队列自旋锁。 执行此作时,驱动程序必须遵循某些规则才能在 IRQL = PASSIVE_LEVEL和 IRQL = DISPATCH_LEVEL正确同步,因为 CustomThreadedDpc 例程可以在两个 IRCL 中执行。

对于普通旋转锁,以下规则适用:

排队旋转锁的规则类似:

由于 KeAcquireSpinLockForDpcKeAcquireInStackQueuedSpinLockForDpc 在DISPATCH_LEVEL调用时不会重置 IRQL,因此它们的执行速度比 KeAcquireSpinLockKeAcquireInStackQueuedSpinLock 分别快。

有关旋转锁的详细信息,请参阅 旋转锁