примечания SAL 2,0 для драйверов Windows

язык аннотирования Microsoft Source Code (SAL) включает заметки, характерные для анализа Windows драйверов и соответствующего кода ядра. Язык аннотации предоставляет способ описания свойств функций, параметров, возвращаемых значений, структур и полей структуры. Заметки подобны комментариям, которые добавляются в код и игнорируются компилятором, но используются средствами статического анализа. Использование заметок помогает улучшить эффективность разработки, помогает повысить точность результатов статического анализа и позволяет средствам лучше определить, существует ли конкретная ошибка. Заметки драйверов не предназначены для использования в коде, отличном от драйвера или не относящемся к ядру. Заметки драйверов определены в Дриверспекс. 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_requires_max(значение)

IRQL_requires_min(значение)

IRQL_raises(значение)

IRQL_requires(значение)

IRQL_raises(значение)

IRQL_saves

IRQL_restores

IRQL_saves_global(тип, параметр)

IRQL_restores_global(тип, параметр)

IRQL_always_function_min(значение)

IRQL_always_function_max(значение)

IRQL_requires_same

Аннотации IRQL

Используйте аннотации IRQL, чтобы указать диапазон уровней IRQL, на котором должна выполняться функция. Аннотации IRQL помогают средству анализа кода более точно находить ошибки.

IRQL_is_cancel Аннотации IRQL

Используйте IRQL_is_cancel аннотации, чтобы обеспечить правильное поведение функции обратного вызова DRIVER_CANCEL .

Kernel_float_saved

Kernel_float_restored

Kernel_float_used

Заметки с плавающей запятой для драйверов

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

Kernel_clear_do_init

DO_DEVICE_INITIALIZING Аннотация

Используйте заметку Kernel_clear_do_init , чтобы указать, должна ли функция с заметками очищать DO_DEVICE_INITIALIZING бит в поле Flags объекта Device.

Kernel_IoGetDmaAdapter

Kernel_IoGetDmaAdapter Заметки

Используйте заметку Kernel_IoGetDmaAdapter , чтобы направить средства анализа кода на неправильное использование указателей DMA.

Interlocked_operand

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

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

Dispatch_type

Заметки для подпрограмм диспетчеризации драйвера.

Используйте Dispatch_type аннотацию, используемую при объявлении подпрограмм ДИСПЕТЧЕРИЗАЦИИ драйвера WDM. См. статью объявление функций с помощью типов ролей функций для драйверов WDM и Добавление заметок к подсистемам диспетчеризации драйверов.

Flt_CompletionContext_Outptr

Flt_CompletionContext_Outptr Заметки

Используйте заметку Flt_CompletionContext_Outptr при объявлении функций обратного вызова предварительной операции минифильтра файловой системы (PFLT_PRE_OPERATION_CALLBACK). Поместите эту заметку в параметре " контекст завершения". Эта заметка направляет средство анализа кода, чтобы проверить правильность завершения для FLT_PREOP_CALLBACK_STATUS возвращаемого значения.

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