Заметки 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++