Функция 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) |