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 将引发到调用 IoConnectInterruptIoConnectInterruptEx中指定的 SynchronizeIrql 值。
  2. 访问 SynchronizeContext 通过获取关联的中断对象旋转锁(或系统事件对象(在PASSIVE_LEVEL运行的 ISR)与分配的 ISR 同步。
  3. 指定的 SynchCritSection 例程使用 SynchronizeContext 值作为其参数调用。
如果 ISR 在 DIRQL >= DISPATCH_LEVEL 运行,则 SynchCritSection 例程在同一 DIRQL 上运行,因此必须尽可能短暂地运行,以避免延迟其他高优先级任务。

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

从 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)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DIRQL (请参阅“备注”部分)

另请参阅

IoConnectInterrupt

IoConnectInterruptEx