KeAcquireInterruptSpinLock function (wdm.h)

The KeAcquireInterruptSpinLock routine acquires the spin lock associated with an interrupt object.

Syntax

KIRQL KeAcquireInterruptSpinLock(
  PKINTERRUPT Interrupt
);

Parameters

Interrupt

[in, out] Specifies a pointer to an interrupt object. This value must be supplied by IoConnectInterrupt or IoConnectInterruptEx.

Return value

KeAcquireInterruptSpinLock returns the current IRQL at the time the routine is called. This value is passed to KeReleaseInterruptSpinLock when the spin lock is released.

Remarks

Drivers use the interrupt spin lock to synchronize access to memory shared with the interrupt's ISR. The driver can release the spin lock by calling KeReleaseInterruptSpinLock.

Any code that executes while the interrupt spin lock is held does so at IRQL = DIRQL for the specified Interrupt, so it must execute very quickly. For more information, see Using Critical Sections.

The preferred way to synchronize a driver routine to an ISR is to use the KeSynchronizeExecution routine.

Starting with Windows 8, a driver can use IoConnectInterruptEx to register an interrupt service routine that runs at IRQL = PASSIVE_LEVEL and that does not use a spin lock for interrupt synchronization. If Interrupt points to an interrupt object that connects to a passive-level ISR, KeAcquireInterruptSpinLock causes a bug check. For more information, see Using Passive-Level Interrupt Service Routines.

Callers must be running at IRQL <= DIRQL for Interrupt. (This is the value the driver passed as the SynchronizeIrql parameter of IoConnectInterrupt when Interrupt is created.)

Requirements

Requirement Value
Minimum supported client Windows XP
Header wdm.h
IRQL <= DIRQL
DDI compliance rules HwStorPortProhibitedDDIs(storport)

See also

IoConnectInterrupt

KeReleaseInterruptSpinLock

KeSynchronizeExecution