Anotações sal 2.0 para drivers do Windows
A SAL (Linguagem de Anotação de Código-Fonte) da Microsoft inclui anotações específicas para a análise de drivers do Windows e o código kernel relacionado. A linguagem de anotação fornece uma maneira de descrever propriedades de funções, parâmetros, valores retornados, estruturas e campos de estrutura. As anotações são como comentários que você adiciona ao código e são ignoradas pelo compilador, mas são usadas pelas ferramentas de análise estática. O uso de anotações ajuda a melhorar a eficácia do desenvolvedor, ajuda a melhorar a precisão dos resultados da análise estática e permite que as ferramentas determinem melhor se existe um bug específico. As anotações de driver não se destinam ao uso em código não relacionado a driver ou não kernel. As anotações de driver são definidas em Driverspecs.h.
Observação Windows 8 apresenta o SAL 2.0, que substitui o SAL 1.0. Para obter informações sobre SAL 2.0, consulte Usando anotações sal para reduzir defeitos de código C/C++. O SAL 2.0 substitui o SAL 1.0. O SAL 2.0 deve ser usado com o WDK (Kit de Driver do Windows) 8 para Windows 8. Se você precisar de informações sobre a SAL 1.0 para drivers, consulte a documentação fornecida com o WDK para Windows 7.
Anotações IRQL
Use as anotações IRQL para especificar o intervalo de níveis IRQL nos quais uma função deve ser executada. As anotações irql ajudam a ferramenta de análise de código a encontrar erros com mais precisão.
_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_
– Use a anotação _IRQL_is_cancel para ajudar a garantir o comportamento correto de uma função de retorno de chamada DRIVER_CANCEL.
Anotações de ponto flutuante para drivers
_Kernel_float_saved_
_Kernel_float_restored_
_Kernel_float_used_
Use as anotações de ponto flutuante para drivers para ajudar a ferramenta de análise de código a detectar o uso de ponto flutuante no código do modo kernel e relatar erros se o estado de ponto flutuante não estiver protegido corretamente.
DO_DEVICE_INITIALIZING anotação
_Kernel_clear_do_init_
Use a anotação DO_DEVICE_INITIALIZING para especificar se a função anotada deve limpar o bit DO_DEVICE_INITIALIZING no campo Sinalizadores do objeto do dispositivo.
Kernel_IoGetDmaAdapter anotação
_Kernel_IoGetDmaAdapter_
Use a anotação Kernel_IoGetDmaAdapter para direcionar as ferramentas de análise de código para procurar o uso indevido de ponteiros de AMD.
Anotações para operandos interligados
_Interlocked_operand_
Use as Anotações para operandos interligados para parâmetros de função para identificá-los como operandos interligados. Várias funções usam como um de seus parâmetros o endereço de uma variável que deve ser acessada usando uma instrução de processador interligada. Essas são instruções atômicas de leitura em cache e, se os operandos forem usados incorretamente, ocorrerão bugs muito sutis.
Anotações para rotinas de expedição de driver
_Dispatch_type_
Use as Anotações para Rotinas de Expedição de Driver ao declarar rotinas de expedição de driver WDM. Para obter mais informações, consulte Declarando funções usando tipos de função para drivers WDM e Anotando rotinas de expedição de driver.
Anotação de _Flt_CompletionContext_Outptr_ de retorno de chamada de pré-operação do minifiltro do sistema de arquivos
_Flt_CompletionContext_Outptr_
Use o retorno de chamada de pré-operação do Minifiltro do Sistema de Arquivos _Flt_CompletionContext_Outptr_ anotação ao declarar funções de retorno de chamada de pré-operação de minifiltro do sistema de arquivos PFLT_PRE_OPERATION_CALLBACK.
Coloque essa anotação no parâmetro CompletionContext. Essa anotação direciona a ferramenta de análise de código para marcar que CompletionContext está correto para o valor retornado FLT_PREOP_CALLBACK_STATUS.
Confira também
Usando anotações de SAL para reduzir defeitos de código do C/C++