Compartilhar via


Sincronização e DPCs encadeados

Para sincronizar o acesso a um local de memória que é acessado dentro e fora de uma rotina CustomThreadedDpc , um driver pode usar bloqueios de rotação comuns ou bloqueios de rotação enfileirados. Ao fazer isso, o driver deve obedecer a determinadas regras para sincronizar corretamente em IRQL = PASSIVE_LEVEL e em IRQL = DISPATCH_LEVEL, porque uma rotina CustomThreadedDpc pode ser executada em ambas as IRQLs.

Para um bloqueio de rotação comum, as seguintes regras se aplicam:

As regras para bloqueios de rotação na fila são semelhantes:

Como KeAcquireSpinLockForDpc e KeAcquireInStackQueuedSpinLockForDpc não redefinem o IRQL quando chamados em DISPATCH_LEVEL, eles são executados mais rápido do que KeAcquireSpinLock e KeAcquireInStackQueuedSpinLock, respectivamente.

Para obter mais informações sobre bloqueios de rotação, consulte Spin Locks.