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

Подпрограмма KeSynchronizeExecution синхронизирует выполнение указанной подпрограммы с подпрограммой службы прерываний (ISR), назначенной набору из одного или нескольких объектов прерывания.

Синтаксис

BOOLEAN KeSynchronizeExecution(
  [in, out]      PKINTERRUPT            Interrupt,
  [in]           PKSYNCHRONIZE_ROUTINE  SynchronizeRoutine,
  [in, optional] __drv_aliasesMem PVOID SynchronizeContext
);

Параметры

[in, out] Interrupt

Указатель на набор объектов прерывания. Вызывающий объект получил этот указатель из подпрограммы IoConnectInterrupt или IoConnectInterruptEx .

[in] SynchronizeRoutine

Указывает предоставленную вызывающим абонентом подпрограмму SynchCritSection , выполнение которой должно синхронизироваться с выполнением ISR, назначенного объектам прерывания.

[in, optional] SynchronizeContext

Указатель на предоставленное вызывающим объектом значение контекста, которое передается подпрограмме SynchCritSection при ее вызове.

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

KeSynchronizeExecution возвращает значение TRUE , если операция завершается успешно. В противном случае возвращается значение FALSE.

Комментарии

При вызове этой подпрограммы происходит следующее:

  1. IrQL вызывается до значения SynchronizeIrql, указанного в вызове IoConnectInterrupt или IoConnectInterruptEx.
  2. Доступ к SynchronizeContext синхронизируется с назначенным ISR путем получения связанного объекта прерывания спин-блокировки (или объекта системного события, если isR выполняется на PASSIVE_LEVEL).
  3. Указанная подпрограмма SynchCritSection вызывается со значением SynchronizeContext в качестве параметра.
Если ISR выполняется в DIRQL >= DISPATCH_LEVEL, подпрограмма SynchCritSection выполняется в том же DIRQL и поэтому должна выполняться в течение как можно более короткого времени, чтобы избежать задержки других высокоприоритетных задач.

Вызывающие экземпляры KeSynchronizeExecution должны выполняться по адресу IRQL <= DIRQL, то есть в СРЕДЕ IRQL, которая меньше или равна значению SynchronizeIrql , заданному вызывающим объектом при регистрации isR в IoConnectInterrupt или IoConnectInterruptEx.

Начиная с Windows 8, драйвер может вызвать KeSynchronizeExecution для синхронизации выполнения подпрограммы SynchCritSection с ISR, которая выполняется в IRQL = PASSIVE_LEVEL. В более ранних версиях Windows KeSynchronizeExecution может синхронизировать выполнение только с ISR, который выполняется в IRQL >= DISPATCH_LEVEL. Дополнительные сведения см. в разделе Использование процедур службы прерывания Passive-Level.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DIRQL (см. раздел "Примечания")

См. также раздел

IoConnectInterrupt

IoConnectInterruptEx