Synchronisierungs- und Thread-DPCs

Um den Zugriff auf einen Speicherort zu synchronisieren, auf den sowohl innerhalb als auch außerhalb einer CustomThreadedDpc-Routine zugegriffen wird, kann ein Treiber normale Spinsperren oder Spinsperren in der Warteschlange verwenden. Dabei muss der Treiber bestimmte Regeln befolgen, um bei IRQL = PASSIVE_LEVEL und bei IRQL = DISPATCH_LEVEL ordnungsgemäß zu synchronisieren, da eine CustomThreadedDpc-Routine an beiden IRQLs ausgeführt werden kann.

Für eine normale Drehsperre gelten die folgenden Regeln:

Die Regeln für Spinsperren in der Warteschlange sind ähnlich:

Da KeAcquireSpinLockForDpc und KeAcquireInStackQueuedSpinLockForDpc die IRQL beim Aufruf bei DISPATCH_LEVEL nicht zurücksetzen, werden sie schneller ausgeführt als KeAcquireSpinLock bzw. KeAcquireInStackQueuedSpinLock.

Weitere Informationen zu Spinlocks finden Sie unter Spinlocks.