Заметки SAL 2.0 для драйверов Windows
Язык заметок исходного кода (Майкрософт) включает заметки, относящиеся к анализу драйверов Windows и связанного кода ядра. Язык заметок предоставляет способ описания свойств функций, параметров, возвращаемых значений, структур и полей структуры. Заметки похожи на комментарии, добавляемые в код, и игнорируются компилятором, но используются средствами статического анализа. Использование заметок помогает повысить эффективность разработчиков, повысить точность результатов статического анализа и позволяет средствам лучше определить, существует ли определенная ошибка. Заметки драйвера не предназначены для использования в коде, не связанном с драйвером или ядром. Заметки драйвера определяются в 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 для Windows 8. Если вам нужны сведения о SAL 1.0 для драйверов, ознакомьтесь с документацией, которая поставляется вместе с WDK для 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_
Используйте заметки для взаимосвязанных операндов для параметров функции, чтобы определить их как взаимосвязанные операнды. Ряд функций принимают в качестве одного из параметров адрес переменной, доступ к которому должен осуществляться с помощью инструкции переблокированного процессора. Это атомарные инструкции для чтения в кэше, и если операнды используются неправильно, возникают очень тонкие ошибки.
Заметки для подпрограмм диспетчеризации драйвера
_Dispatch_type_
Используйте заметки для подпрограмм диспетчеризации драйверов при объявлении подпрограмм диспетчеризации драйвера WDM. Дополнительные сведения см. в разделах Объявление функций с помощью типов ролей функций для драйверов WDM и Аннотирование процедур диспетчеризации драйверов.
Заметка _Flt_CompletionContext_Outptr_ обратного вызова минифильтра файловой системы перед операцией
_Flt_CompletionContext_Outptr_
При объявлении функций обратного вызова перед операцией минифильтра файловой системы _Flt_CompletionContext_Outptr_ перед операцией PFLT_PRE_OPERATION_CALLBACK используйте заметку обратного вызова минифильтра файловой системы перед операцией.
Поместите эту заметку в параметр CompletionContext. Эта заметка указывает средству анализа кода проверка, что CompletionContext является правильным для возвращаемого значения FLT_PREOP_CALLBACK_STATUS.
См. также раздел
Использование аннотаций SAL для сокращения количества дефектов в коде C/C++