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 的資訊,請參閱隨附於適用於 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 驅動程式的函數 和 標註驅動程式分派例程 。
文件系統 Minifilter 預操作回呼 _Flt_CompletionContext_Outptr_ 註解
_Flt_CompletionContext_Outptr_
當您宣告檔案系統小型篩選預作業回呼函式 PFLT_PRE_OPERATION_CALLBACK 時,請使用 _Flt_CompletionContext_Outptr_ 註解。
將此批注放在 CompletionContext 參數上。 此批註會指示程式碼分析工具檢查 CompletionContext 是否正確,特別是針對 FLT_PREOP_CALLBACK_STATUS 的傳回值。