Annotations SAL 2.0 pour les pilotes Windows

Microsoft Source Code Annotation Language (SAL) inclut des annotations spécifiques à l’analyse des pilotes Windows et du code du noyau associé. Le langage d’annotation permet de décrire les propriétés des fonctions, des paramètres, des valeurs de retour, des structures et des champs de structure. Les annotations sont similaires aux commentaires que vous ajoutez à votre code et sont ignorées par le compilateur, mais utilisées par les outils d’analyse statique. L’utilisation d’annotations permet d’améliorer l’efficacité des développeurs, d’améliorer la précision des résultats de l’analyse statique et permet aux outils de mieux déterminer s’il existe un bogue particulier. Les annotations de pilote ne sont pas destinées à être utilisées dans du code non-pilote ou non lié au noyau. Les annotations de pilote sont définies dans Driverspecs.h.

Notez Windows 8 introduit SAL 2.0, qui remplace SAL 1.0. Pour plus d’informations sur SAL 2.0, consultez Utilisation des annotations SAL pour réduire les défauts de code C/C++. SAL 2.0 remplace SAL 1.0. SAL 2.0 doit être utilisé avec le Kit de pilotes Windows (WDK) 8 pour Windows 8. Si vous avez besoin d’informations sur sal 1.0 pour les pilotes, reportez-vous à la documentation fournie avec wdk pour Windows 7.

Annotations IRQL

Utilisez les annotations IRQL pour spécifier la plage de niveaux IRQL auxquels une fonction doit s’exécuter. Les annotations IRQL aident l’outil d’analyse du code à rechercher plus précisément les erreurs.

_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_ - Utilisez l’annotation _IRQL_is_cancel pour garantir le comportement correct d’une fonction de rappel DRIVER_CANCEL.

Annotations à virgule flottante pour les pilotes

_Kernel_float_saved_

_Kernel_float_restored_

_Kernel_float_used_

Utilisez les annotations à virgule flottante pour les pilotes afin d’aider l’outil d’analyse du code à détecter l’utilisation de la virgule flottante dans le code en mode noyau et pour signaler les erreurs si l’état à virgule flottante n’est pas correctement protégé.

annotation DO_DEVICE_INITIALIZING

_Kernel_clear_do_init_

Utilisez l’annotation DO_DEVICE_INITIALIZING pour spécifier si la fonction annotée est censée effacer le bit DO_DEVICE_INITIALIZING dans le champ Indicateurs de l’objet d’appareil.

annotation Kernel_IoGetDmaAdapter

_Kernel_IoGetDmaAdapter_

Utilisez l’annotation Kernel_IoGetDmaAdapter pour indiquer aux outils d’analyse du code de rechercher une mauvaise utilisation des pointeurs DMA.

Annotations pour les opérandes verrouillés

_Interlocked_operand_

Utilisez les annotations pour les opérandes verrouillés pour les paramètres de fonction afin de les identifier en tant qu’opérandes verrouillés. Un certain nombre de fonctions prennent comme paramètre l’adresse d’une variable qui doit être accessible à l’aide d’une instruction de processeur verrouillée. Il s’agit d’instructions atomiques en lecture dans le cache, et si les opérandes sont utilisés incorrectement, des bogues très subtils en résultent.

Annotations pour les routines de répartition des pilotes

_Dispatch_type_

Utilisez les annotations pour les routines de répartition des pilotes lorsque vous déclarez des routines de distribution de pilotes WDM. Pour plus d’informations, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes WDM et Annotation des routines de répartition des pilotes.

Annotation _Flt_CompletionContext_Outptr_ rappel de pré-opération du système de fichiers Minifilter

_Flt_CompletionContext_Outptr_

Utilisez l’annotation _Flt_CompletionContext_Outptr_ rappel de pré-opération du système de fichiers lorsque vous déclarez des fonctions de rappel de pré-opération minifiltre du système de fichiers PFLT_PRE_OPERATION_CALLBACK.

Placez cette annotation sur le paramètre CompletionContext. Cette annotation indique à l’outil d’analyse du code de case activée que l’élément CompletionContext est correct pour la valeur de retour FLT_PREOP_CALLBACK_STATUS.

Voir aussi

Utilisation d’annotations SAL pour réduire les défauts du code C/C++