适用于 Windows 驱动程序的 SAL 2.0 注释
Microsoft 源代码注释语言 (SAL) 包括特定于 Windows 驱动程序和相关内核代码分析的注释。 注释语言提供了一种描述函数、参数、返回值、结构和结构字段的属性的方式。 批注类似于添加到代码中的注释,编译器会忽略这些注释,但由静态分析工具使用。 使用注释有助于提高开发人员的效率,有助于提高静态分析结果的准确性,并允许工具更好地确定是否存在特定 bug。 驱动程序注释不适用于非驱动程序或与内核无关的代码。 驱动程序注释在 Driverspecs.h 中定义。
注意 Windows 8 引入了 SAL 2.0,取代 SAL 1.0。 有关 SAL 2.0 的信息,请参阅 使用 SAL 注释减少 C/C++ 代码缺陷。 SAL 2.0 取代 SAL 1.0。 SAL 2.0 应与 Windows 8 的 Windows 驱动程序工具包 (WDK) 8 配合使用。 如果需要有关驱动程序 SAL 1.0 的信息,请参阅 WDK for Windows 7 附带的文档。
IRQL 注释
使用 IRQL 批注 指定函数应运行的 IRQL 级别范围。 IRQL 注释可帮助代码分析工具更准确地查找错误。
_IRQL_requires_max_(value)
_IRQL_requires_min_(value)
_IRQL_raises_(value)
_IRQL_requires_(value)
_IRQL_raises_(value)
_IRQL_saves_
_IRQL_restores_
_IRQL_saves_global_(kind, param)
_IRQL_restores_global_(kind, param)
_IRQL_always_function_min_(value)
_IRQL_always_function_max_(value)
_IRQL_requires_same_
_IRQL_is_cancel_
- 使用_IRQL_is_cancel注释来帮助确保DRIVER_CANCEL回调函数的正确行为。
驱动程序的浮点注释
_Kernel_float_saved_
_Kernel_float_restored_
_Kernel_float_used_
使用 驱动程序的浮点注释 可帮助代码分析工具检测内核模式代码中浮点的使用情况,并在浮点状态未得到适当保护时报告错误。
DO_DEVICE_INITIALIZING批注
_Kernel_clear_do_init_
使用 DO_DEVICE_INITIALIZING批注 指定是否应批注函数清除设备对象的“标志”字段中的DO_DEVICE_INITIALIZING位。
Kernel_IoGetDmaAdapter批注
_Kernel_IoGetDmaAdapter_
使用 Kernel_IoGetDmaAdapter 注释 指示代码分析工具查找 DMA 指针的滥用情况。
互锁操作数的注释
_Interlocked_operand_
使用函数参数 的互锁操作数的批注 将其标识为互锁操作数。 许多函数采用应使用互锁处理器指令访问的变量的地址作为其参数之一。 这些是缓存读通原子指令,如果操作数使用不当,则会导致非常微妙的 bug。
驱动程序调度例程的注释
_Dispatch_type_
声明 WDM 驱动程序调度例程时,请使用驱动程序 调度例程的注释。 有关详细信息,请参阅 使用 WDM 驱动程序的函数角色类型声明 函数和 批注驱动程序调度例程。
文件系统微筛选器操作前回调_Flt_CompletionContext_Outptr_批注
_Flt_CompletionContext_Outptr_
PFLT_PRE_OPERATION_CALLBACK声明 文件系统微筛选器预操作回调 函数时,请使用文件系统微筛选器操作前回调 _Flt_CompletionContext_Outptr_注释。
将此批注放在 CompletionContext 参数上。 此批注指示代码分析工具检查 CompletionContext 对于FLT_PREOP_CALLBACK_STATUS返回值是正确的。