Поделиться через


Аннотации SAL 2.0 для драйверов Windows

Язык заметки исходного кода Майкрософт (SAL) включает заметки, относящиеся к анализу драйверов 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 в поле Flags объекта устройства.

заметка Kernel_IoGetDmaAdapter

_Kernel_IoGetDmaAdapter_

Используйте аннотацию Kernel_IoGetDmaAdapter для направления инструментов анализа кода для поиска неправильного использования указателей DMA.

Заметки для интерблокируемых операндов

_Interlocked_operand_

Используйте аннотации для интерблокируемых операндов для параметров функции, чтобы идентифицировать их как интерблокируемые операнды. Ряд функций принимает в качестве параметра адрес переменной, к которой следует получить доступ с помощью инструкции с блокировкой процессора. Это атомарные инструкции с прямым чтением из кэша, и если операнды используются неправильно, возникают очень тонкие ошибки.

Аннотации для процедур вызова драйверов

_Dispatch_type_

Используйте аннотации для диспетчерских подпрограмм драйверов при объявлении диспетчерских подпрограмм WDM драйверов. Дополнительные сведения см. в разделе Объявление функций с использованием типов ролей функций для драйверов WDM и Аннотирование подпрограмм диспетчеров драйверов.

Аннотация обратного вызова предварительной операции файловой системы Minifilter _Flt_CompletionContext_Outptr_

_Flt_CompletionContext_Outptr_

Используйте аннотацию _Flt_CompletionContext_Outptr_ для предварительного обратного вызова файловой системы при объявлении функций предварительной операции фильтра файловой системы PFLT_PRE_OPERATION_CALLBACK.

Поместите эту заметку в параметр CompletionContext. Эта аннотация направляет инструмент анализа кода на проверку правильности CompletionContext для возвращаемого значения FLT_PREOP_CALLBACK_STATUS.

См. также

Использование аннотаций SAL для уменьшения количества дефектов в коде C/C++