KSYNCHRONIZE_ROUTINE回调函数 (wdm.h)
SynchCritSection 例程用于访问与驱动程序的 InterruptService 例程共享的硬件资源或驱动程序数据。
语法
KSYNCHRONIZE_ROUTINE KsynchronizeRoutine;
BOOLEAN KsynchronizeRoutine(
[in] PVOID SynchronizeContext
)
{...}
参数
[in] SynchronizeContext
调用方提供的上下文信息,由驱动程序调用 KeSynchronizeExecution指定的上下文信息。
返回值
如果例程的作成功,则例程应返回 true ;否则,它应返回 FALSE。 (此例程的成功和失败是驱动程序定义的。指定的返回值将成为 KeSynchronizeExecution的返回值。
言论
驱动程序必须使用 SynchCritSection 例程访问硬件资源或驱动程序数据,这些硬件资源或驱动程序数据也可以由 InterruptService 例程(ISR)访问。
当驱动程序调用 KeSynchronizeExecution时,系统会调用驱动程序的 SynchCritSection 例程。 当驱动程序 KeSynchronizeExecution时,它指定 SynchCritSection 例程、例程的上下文信息和中断对象指针的地址。 KeSynchronizeExecution 例程获取中断对象的旋转锁,然后调用 SynchCritSection 例程。
驱动程序的 SynchCritSection 例程在与其关联的 ISR 所在的同一 IRQL 处执行。 具体而言,它在某些系统分配 DIRQL执行,由 SynchronizeIrql 参数指定,以 IoConnectInterrupt。 (具有较高 DIRQL 值的其他设备可能会中断 SynchCritSection 例程。
例子
若要定义 SynchCritSection 回调例程,必须先提供一个函数声明来标识要定义的回调例程的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析、静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。
例如,若要定义名为 MySynchCritSection
的 SynchCritSection 回调例程,请使用KSYNCHRONIZE_ROUTINE类型,如以下代码示例所示:
KSYNCHRONIZE_ROUTINE MySynchCritSection;
然后,按如下所示实现回调例程:
_Use_decl_annotations_
BOOLEAN
MySynchCritSection(
PVOID SynchronizeContext
)
{
// Function body
}
KSYNCHRONIZE_ROUTINE函数类型在 Wdm.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 _Use_decl_annotations_
注释添加到函数定义。
_Use_decl_annotations_
批注可确保使用应用于头文件中KSYNCHRONIZE_ROUTINE函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 WDM 驱动程序的函数角色类型来声明函数。 有关 _Use_decl_annotations_
的信息,请参阅 批注函数行为。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | 在 DIRQL 中调用(请参阅“备注”部分)。 |