Поделиться через


Функция KeAcquireInterruptSpinLock (wdm.h)

Программа KeAcquireInterruptSpinLock получает блокировку спина, связанную с объектом прерывания.

Синтаксис

KIRQL KeAcquireInterruptSpinLock(
  PKINTERRUPT Interrupt
);

Параметры

Interrupt

[in, out] Указывает указатель на объект прерывания. Это значение должно быть предоставлено IoConnectInterrupt или IoConnectInterruptEx.

Возвращаемое значение

KeAcquireInterruptSpinLock возвращает текущий IRQL во время вызова подпрограммы. Это значение передается в KeReleaseInterruptSpinLock при освобождении блокировки спина.

Замечания

Драйверы используют блокировку прерывания для синхронизации доступа к памяти, к которой предоставлен общий доступ к isR прерывания. Драйвер может освободить блокировку спина, вызвав KeReleaseInterruptSpinLock.

Любой код, выполняющийся во время блокировки прерывания, делает это в IRQL = DIRQL для указанного прерывания, поэтому он должен выполняться очень быстро. Дополнительные сведения см. в разделе Использование критически важных разделов.

Предпочтительный способ синхронизации подпрограммы драйвера с ISR — использовать подпрограмму KeSynchronizeExecution.

Начиная с Windows 8 драйвер может использовать IoConnectInterruptEx для регистрации подпрограммы службы прерываний, которая выполняется в IRQL = PASSIVE_LEVEL, и не использует блокировку спина для синхронизации прерываний. Если прерывание указывает на объект прерывания, который подключается к isR пассивного уровня, KeAcquireInterruptSpinLock вызывает проверку ошибок. Дополнительные сведения см. в разделе Использование подпрограмм Passive-Level прерываний.

Вызывающие операторы должны работать в IRQL <= DIRQL для прерывания. (Это значение драйвера, переданного в качестве параметра SynchronizeIrqlIoConnectInterrupt при создании прерывания.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP
заголовка wdm.h
IRQL <= DIRQL
правил соответствия DDI HwStorPortProhibitedDIs(storport)

См. также

IoConnectInterrupt

KeReleaseInterruptSpinLock

KeSynchronizeExecution