KeSynchronizeExecution 函数 (wdm.h)

KeSynchronizeExecution 例程将指定的例程的执行与分配给一个或多个中断对象的 ISR) (中断服务例程同步。

语法

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

参数

[in, out] Interrupt

指向一组中断对象的指针。 调用方从 IoConnectInterruptIoConnectInterruptEx 例程获取此指针。

[in] SynchronizeRoutine

指定调用方提供的 SynchCritSection 例程,该例程的执行将与分配给中断对象的 ISR 的执行同步。

[in, optional] SynchronizeContext

指向调用方提供的上下文值的指针,在调用 SynchCritSection 例程时要传递给它。

返回值

如果操作成功,KeSynchronizeExecution 将返回 TRUE。 否则,它将返回 FALSE

注解

调用此例程时,将发生以下情况:

  1. IRQL 将提升为调用 IoConnectInterrupt 或 IoConnectInterruptEx 中指定的 SynchronizeIrql 值。
  2. 如果 ISR 在PASSIVE_LEVEL) 运行,则通过获取关联的中断对象旋转锁 (或系统事件对象来同步对 SynchronizeContext 的访问。
  3. 使用 SyncContext 值作为其参数调用指定的 SynchCritSection 例程。
如果 ISR 在 DIRQL >= DISPATCH_LEVEL 运行, 则 SynchCritSection 例程在同一 DIRQL 上运行,因此必须尽可能短地运行一段时间,以避免延迟其他高优先级任务。

KeSynchronizeExecution 的调用方必须在 IRQL <= DIRQL 上运行;也就是说,在 IRQL 上运行,该值小于或等于调用方在向 IoConnectInterrupt 或 IoConnectInterruptEx 注册其 ISR 时指定的 SynchronizeIrql 值的值。

从 Windows 8 开始,驱动程序可以调用 KeSynchronizeExecution,以将 SynchCritSection 例程的执行与在 IRQL = PASSIVE_LEVEL 运行的 ISR 同步。 在早期版本的 Windows 中, KeSynchronizeExecution 只能与在 IRQL >= DISPATCH_LEVEL 运行的 ISR 同步执行。 有关详细信息,请参阅 使用 Passive-Level 中断服务例程

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DIRQL (请参阅备注部分)

另请参阅

IoConnectInterrupt

IoConnectInterruptEx