Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Язык заметки исходного кода Майкрософт (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++