Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para sincronizar el acceso a una ubicación de memoria a la que se accede desde dentro y fuera de una rutina CustomThreadedDpc , un controlador puede usar bloqueos de giro normales o bloqueos de giro en cola. Al hacerlo, el controlador debe obedecer ciertas reglas para sincronizar correctamente en IRQL = PASSIVE_LEVEL y en IRQL = DISPATCH_LEVEL, ya que una rutina CustomThreadedDpc puede ejecutarse en ambos IRQLs.
Para un bloqueo de giro normal, se aplican las siguientes reglas:
Para adquirir y liberar el bloqueo de giro, el controlador puede llamar a KeAcquireSpinLock y KeReleaseSpinLock desde dentro y fuera de la rutina CustomThreadedDpc .
El controlador puede invocar las funciones KeAcquireSpinLockForDpc y KeReleaseSpinLockForDpc desde la rutina CustomThreadedDpc. Tenga en cuenta que la rutina CustomThreadedDpc no debe llamar a KeAcquireSpinLockAtDpcLevel o KeReleaseSpinLockFromDpcLevel, ya que estas rutinas solo se pueden llamar de forma segura en IRQL = DISPATCH_LEVEL.
Las reglas para los cerrojos de espera en cola son similares:
Para adquirir y liberar el spin lock, el controlador puede llamar a KeAcquireInStackQueuedSpinLock y KeReleaseInStackQueuedSpinLock desde dentro y fuera de la rutina CustomThreadedDpc.
El controlador puede llamar a KeAcquireInStackQueuedSpinLockForDpc y KeReleaseInStackQueuedSpinLockForDpc desde la rutina CustomThreadedDpc. Tenga en cuenta que la rutina CustomThreadedDpc no debe llamar a KeAcquireInStackQueuedSpinLockAtDpcLevel o KeReleaseInStackQueuedSpinLockFromDpcLevel, ya que estas rutinas solo se pueden llamar de forma segura en IRQL = DISPATCH_LEVEL.
Dado que KeAcquireSpinLockForDpc y KeAcquireInStackQueuedSpinLockForDpc no restablecen el IRQL cuando se llama a DISPATCH_LEVEL, se ejecutan más rápido que KeAcquireSpinLock y KeAcquireInStackQueuedSpinLock, respectivamente.
Para obtener más información sobre los bloqueos de número, consulte Bloqueos de número.