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

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

Синтаксис

KIRQL KeAcquireInterruptSpinLock(
  PKINTERRUPT Interrupt
);

Параметры

Interrupt

[вход, выход] Указывает указатель на объект прерывания. Это значение должно быть предоставлено 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