適用於 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 驅動程式套件搭配使用, (WDK) 8 for Windows 8。 如果您需要有關驅動程式 SAL 1.0 的資訊,請參閱隨附於適用於 Windows 7 的 WDK 的檔案。

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註釋 來指定批註函式是否預期要清除裝置物件的 Flags 欄位中的DO_DEVICE_INITIALIZING位。

Kernel_IoGetDmaAdapter批注

_Kernel_IoGetDmaAdapter_

使用 Kernel_IoGetDmaAdapter 批註 指示程式代碼分析工具尋找誤用 DMA 指標。

連結操作數的註釋

_Interlocked_operand_

針對函式參數使用 連結操作數的註釋 ,將它們識別為連結操作數。 許多函式會採用其其中一個參數,這是應該使用連結處理器指令存取之變數的位址。 這些是快取讀取不可部分完成的指令,如果操作數不正確使用,則非常細微的錯誤結果。

驅動程式分派例程的註釋

_Dispatch_type_

當您宣告 WDM 驅動程式分派例程時,請使用 驅動程式分派例 程的註釋。 如需詳細資訊,請參閱 使用WDM驅動程式的函式角色類型宣告 函式和 標註驅動程式分派例程

檔系統迷你篩選預先作業回呼_Flt_CompletionContext_Outptr_批注

_Flt_CompletionContext_Outptr_

當您宣告檔系統迷你篩選預作業回呼函式PFLT_PRE_OPERATION_CALLBACK時,請使用檔案系統迷你篩選預作業回呼_Flt_CompletionContext_Outptr_批注

將此批注放在 CompletionContext 參數上。 此批注會指示程序代碼分析工具檢查 CompletionContext 是否正確,以FLT_PREOP_CALLBACK_STATUS傳回值。

另請參閱

使用 SAL 註釋減少 C/C++ 程式碼的缺失