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