Partage via


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 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é du développeur, d’améliorer la précision des résultats de l’analyse statique et permet aux outils de mieux déterminer si un bogue particulier existe. 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.

Note 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 le SAL 1.0 pour les pilotes, reportez-vous à la documentation fournie avec wdK pour Windows 7.

Annotations d'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 un 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 pour aider l’outil d’analyse du code à détecter l’utilisation de virgule flottante en code en mode noyau et pour signaler des 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 de l’appareil.

Annotation de Kernel_IoGetDmaAdapter

_Kernel_IoGetDmaAdapter_

Utilisez l’annotation Kernel_IoGetDmaAdapter pour diriger les outils d’analyse du code pour rechercher une mauvaise utilisation des pointeurs DMA.

Annotations pour les opérandes interblocés

_Interlocked_operand_

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

Annotations pour les routines de dispatch de pilotes

_Dispatch_type_

Utilisez les annotations pour les routines de distribution de 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 annoter les routines de répartition des pilotes.

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

_Flt_CompletionContext_Outptr_

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

Placez cette annotation sur le paramètre CompletionContext. Cette annotation dirige l’outil d’analyse du code pour vérifier que le 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++