Partager via


Ensemble de règles des règles recommandées mixtes

Les règles recommandées du mixed de Microsoft sont focalisées sur les problèmes les plus fréquents et critiques rencontrés dans vos projets C++ qui prennent en charge le Common Language Runtime, comme les failles de sécurité éventuelles, les arrêts brutaux des applications et autres erreurs de logique ou de conception importantes.Vous devez inclure cet ensemble de règles dans tout ensemble de règles personnalisé que vous créez pour vos projets C++ qui prennent en charge le Commun Language Runtime.Cet ensemble de règles est conçu pour être configuré avec l'édition Visual Studio Professional et ultérieure.

Règle

Description

C6001

Utilisation de d'une mémoire non initialisée

C6011

Suppression de la référence du pointeur NULL

C6029

Utilisation d'une valeur non vérifiée

C6031

Valeur de retour ignorée

C6053

Terminaison par zéro de l'appel

C6054

Terminaison par zéro manquant

C6059

Mauvaise Concaténation

C6063

Argument String manquant pour formater la fonction

C6064

Argument Integer manquant pour formater la fonction

C6066

Argument Pointer manquant pour formater la fonction

C6067

Argument String Pointer manquant pour formater la fonction

C6101

Renvoi de la mémoire non initialisée

C6200

L'index dépasse la taille maximale autorisée par la mémoire tampon

C6201

L'index dépasse la taille maximale autorisée par la mémoire tampon allouée par la pile

C6214

Cast non valide de HRESULT en BOOL

C6215

Cast non valide de BOOL en HRESULT

C6216

Transtypage inséré par le compilateur de BOOL vers HRESULT non valide

C6217

Test HRESULT non valide avec NOT

C6220

HRESULT comparé à -1 non valide

C6226

Affectation de HRESULT à -1 non valide

C6230

Utilisation non valide de HRESULT comme booléen

C6235

Constante non nulle avec OR logique

C6236

OR logique avec constante non nulle

C6237

Un zéro avec un AND logique perd ses effets secondaires

C6242

Déroulement local provoqué

C6248

Création d'un DACL Null

C6250

Descripteurs d'adresses non commercialisés

C6255

Utilisation non protégée d'alloca

C6258

Utilisation de Terminate Thread

C6259

Code mort dans le commutateur limité OR au niveau du bit

C6260

Utilisation de l'arithmétique d'octets

C6262

Utilisation excessive de la pile

C6263

Utilisation d'alloca dans une boucle

C6268

Parenthèses manquantes dans le transtypage

C6269

Déréférencement du pointeur ignoré

C6270

Argument float manquant pour le formatage de la fonction

C6271

Argument supplémentaire pour le formatage de la fonction

C6272

Argument non float pour le formatage de la fonction

C6273

Argument non entier pour le formatage de la fonction

C6274

Argument autre qu'un caractère pour le formatage de la fonction

C6276

Transtypage de chaîne non valide

C6277

Appel CreateProcess non valide

C6278

Incompatibilité entre tableau new et scalaire delete

C6279

Incompatibilité entre tableau new et tableau delete

C6280

Incompatibilité entre allocation et désallocation de mémoire

C6281

Priorité de relation de bits

C6282

L'affectation remplace le test

C6283

Incompatibilité primitive entre tableau new et scalaire delete

C6284

Argument objet manquant pour le formatage de la fonction

C6285

OR logique de constantes

C6286

Perte des effets secondaires de l'OR logique non nul

C6287

Test redondant

C6288

L'inclusion mutuelle sur l'AND logique est false

C6289

L'exclusion mutuelle sur l'OR logique est true

C6290

Priorité NOT logique et AND au niveau du bit

C6291

Priorité NOT logique et OR au niveau du bit

C6292

La boucle calcule à partir de la valeur maximale

C6293

La boucle calcule à partir de la valeur minimale

C6294

Le corps de la boucle n'est jamais exécuté

C6295

Boucle infinie

C6296

Boucle exécutée une seule fois

C6297

Résultat du transtypage décalé en une taille supérieure

C6299

Comparaison champ de bits et booléen

C6302

Argument de chaîne de caractères non valide pour formater la fonction

C6303

Argument de chaîne de caractères larges invalide pour formater la fonction

C6305

Incompatibilité entre la taille et la quantité

C6306

Appel de fonction d'argument de variable non valide

C6308

Fuite de réallocation

C6310

Constante de filtre d'exception non autorisée

C6312

Boucle d'Exception continue Exception

C6314

Priorité d'OR au niveau du bit

C6317

Complément NOT NOT

C6318

Exception de Recherche continue

C6319

Ignoré par la virgule

C6324

Copie d'une chaîne au lieu d'une comparaison de chaînes

C6328

Incompatibilité de type d'argument possible

C6331

Indicateurs VirtualFree non valides

C6332

Paramètre VirtualFree non valide

C6333

Taille VirtualFree non valide

C6335

Fuite du handle de processus

C6381

Informations sur l'arrêt manquantes

C6383

Dépassement de mémoire tampon en raison de la conversion de element-count en byte-count

C6384

Division de taille du pointeur

C6385

Dépassement en lecture

C6386

Dépassement en écriture

C6387

Valeur du paramètre non valide

C6388

Valeur du paramètre non valide

C6500

Propriété d'attribut non-valide

C6501

Valeurs de propriété d'attribut en conflit

C6503

Les références ne peut pas avoir la valeur null

C6504

Null sur élément non pointeur

C6505

MustCheck sur Void

C6506

Taille de mémoire tampon sur élément non pointeur ou tableau

C6507

Incompatibilité de Null de déférencement de zéro

C6508

Accès en écriture sur constante

C6509

Retour utilisé sur condition préalable

C6510

Terminaison par Null sur élément non pointeur

C6511

MustCheck doit avoir la valeur Yes ou No

C6513

Taille d'élément sans taille de mémoire tampon

C6514

Taille de mémoire tampon dépasse la taille du tableau

C6515

Taille de mémoire tampon sur élément non pointeur

C6516

Pas de propriétés sur l'attribut

C6517

Taille valide dans mémoire tampon non lisible

C6518

Taille accessible en écriture dans mémoire tampon non accessible en écriture

C6519

Annotation non valide : la valeur de la propriété 'NeedsRelease' doit être définie à Yes ou No

C6521

Déférencement de String Size non valide

C6522

Type de String Size Invalid

C6523

Paramètre de taille de chaîne non valide

C6525

Chaîne de taille non valide. Emplacement inaccessible.

C6526

Taille du type de tampon de chaîne invalide

C6527

Annotation non valide : la propriété 'NeedsRelease' peut ne pas être utilisée dans des valeurs de type void

C6530

Style de chaîne de format non reconnu

C6540

L'utilisation d'annotations d'attribut sur cette fonction invalidera l'ensemble de ses annotations __declspec existantes

C6551

Spécification de taille non valide : l'expression n'est pas analysable

C6552

Deref= ou Notref= non valide : l'expression n'est pas analysable

C6701

La valeur n'est pas une valeur Yes/No/Maybe valide

C6702

La valeur n'est pas une valeur de chaîne

C6703

La valeur n'est pas un nombre

C6704

Erreur d'expression de l'annotation inattendue

C6705

Le nombre d'arguments attendus pour l'annotation ne correspond pas au nombre réel d'arguments pour l'annotation

C6706

Erreur d'Annotation pour l'annotation inattendue

C6995

Échec de l'enregistrement du fichier journal XML

C26100

Condition de concurrence

C26101

Impossible d'utiliser correctement l'opération à blocage

C26110

Appelant ne parvenant pas à maintenir le verrou

C26111

Appelant ne parvenant pas à libérer le verrou

C26112

L'appelant ne peut maintenir aucun verrou

C26115

Échec de la libération du verrou

C26116

Échec de la libération du verrou

C26117

Libération d'un verrou non maintenu

C26140

Erreur d'annotation SAL d'accès concurrentiel

C28020

L'expression n'a pas la valeur true dans cet appel

C28021

Le paramètre annoté doit être un pointeur

C28022

La ou les classes de fonction sur cette fonction ne correspondent pas à la ou les classes de fonction sur le typedef utilisé pour la définir.

C28023

La fonction attribuée ou passée doit avoir une annotation _Function_class_ pour au moins une classe

C28024

Le pointeur de la fonction attribuée est annoté avec la classe de fonction laquelle n'est pas contenue dans la ou les listes de classes de fonction.

C28039

Le type du paramètre réel doit correspondre exactement au type

C28112

Une variable à laquelle vous accédez via une fonction Interlocked doit toujours être accédée via cette fonction.

C28113

Accès à une variable locale via une fonction Interlocked

C28125

La fonction doit être appelée depuis l'intérieur d'un bloc try/except

C28137

L'argument de la variable devrait plutôt être une constante (littéral)

C28138

L'argument de la constante devrait plutôt être une variable

C28159

Utilisez une autre fonction.

C28160

Error annotation

C28163

La fonction ne doit jamais être appelée depuis l'intérieur d'un bloc try/except

C28164

L'argument est passé à une fonction qui attends un pointeur vers un objet (pas un pointeur vers un pointeur)

C28182

Déréférencer le pointeur NULL.Le pointeur contient la même valeur NULL que contenait un autre pointeur.

C28183

L'argument pouvait être une valeur et il est une copie de la valeur trouvée dans le pointeur

C28193

La variable contient une valeur qui doit être examinée

C28196

La spécification n'est pas satisfaite. (L'expression n'a pas la valeur true.)

C28202

Référence non autorisée au membre non statique

C28203

Référence ambiguë au membre de classe.

C28205

_Success_ ou _On_failure_ utilisés dans un contexte non autorisé

C28206

L'opérande de gauche pointe vers un struct, utiliser '->'

C28207

L'opérande de gauche est un struct, utiliser '.'

C28209

La déclaration pour un symbole possède une déclaration en conflit

C28210

Les annotations pour le contexte __on_failure ne doivent pas se trouver dans un contexte préalable explicite

C28211

Nom du contexte statique attendu pour SAL_context

C28212

Expression de pointeur attendue pour l'annotation

C28213

L'annotation _Use_decl_annotations_ doit être utilisée pour référencer, sans modification, une déclaration antérieure.

C28214

Les noms des paramètres d'attribut doivent être p1…p9

C28215

Le typefix ne peut pas être appliqué à un paramètre qui contient déjà un typefix

C28216

L'annotation checkReturn s'applique uniquement aux postconditions pour le paramètre fonction spécifique.

C28217

Pour la fonction, le nombre de paramètres de l'annotation ne correspond pas au nombre trouvé dans le fichier

C28218

Pour le paramètre de la fonction, le paramètre de l'annotation ne correspond pas au nombre trouvé sur le fichier

C28219

Membre de l'énumération attendu pour une annotation, le paramètre dans l'annotation

C28220

Expression d'entier attendue pour annotation du paramètre dans l'annotation

C28221

Expression de chaîne attendue pour le paramètre dans l'annotation

C28222

__yes, __no, ou __maybe attendu pour l'annotation

C28223

Jeton/identificateur attendu pour le paramètre de l'annotation

C28224

L'annotation requiert des paramètres

C28225

N'a pas trouvé le nombre correcte de paramètres requis dans l'annotation

C28226

L'annotation ne peut pas être un PrimOp également (dans la déclaration actuelle)

C28227

L'annotation ne peut pas être un PrimOp également (voir la déclaration antérieure)

C28228

Annotation paramètre : le type ne peut pas être utilisé dans les annotations

C28229

L'annotation ne prend pas en charge des paramètres

C28230

Le type de paramètre n'a aucun membre.

C28231

L'annotation n'est valide que sur un tableau

C28232

pre, post, ou deref ne sont appliqués à aucune annotation

C28233

pre, post, ou deref sont appliqués à un bloc

C28234

L'expression __at ne s'applique pas à la fonction active

C28235

La fonction ne peut pas être une annotation autonome

C28236

L'annotation ne peut pas être utilisée dans une expression

C28237

L'annotation sur paramètre n'est plus prise en charge

C28238

L'annotation sur paramètre possède plusieurs valeurs, stringValue, et longValue.Utilisez paramn=xxx

C28239

L'annotation sur paramètre possède à la fois value, stringValue, ou longValue ; et paramn=xxx.Utiliser uniquement paramn=xxx

C28240

L'annotation sur paramètre possède param2 et non param1

C28241

L'Annotation pour la fonction sur paramètre n'est pas reconnu

C28243

L'annotation pour la fonction sur paramètre nécessite plus de déréférencements que ne l'autorise le type réel annoté

C28244

L'annotation pour la fonction possède un paramètre/annotation externe non analysable

C28245

L'annotation pour la fonction annote 'this' sur une fonction non membre

C28246

Le paramètre d'annotation pour la fonction ne correspond pas au type du paramètre

C28250

Annotation incohérente pour la function : l'instance précédente présente une erreur.

C28251

Annotation incohérente pour la fonction : Cette instance a une erreur.

C28252

Annotation incohérente pour la fonction : paramètre a une annotation sur cet instance.

C28253

Annotation incohérente pour la fonction : paramètre a une annotation sur cet instance.

C28254

dynamic_cast<>() n'est pas pris en charge dans les annotations

C28262

Une erreur de syntaxe dans l'annotation a été trouvée dans la fonction pour l'annotation

C28263

Une erreur de syntaxe dans une annotation conditionnelle a été trouvée pour l'annotation intrinsèque

C28264

Les valeurs des listes de résultats doivent être des constantes.

C28267

Une erreur de syntaxe dans les annotations a été trouvée dans la fonction d'annotation.

C28272

L'annotation pour la fonction, paramètre lors de l'examen est incohérente avec la déclaration de la fonction

C28273

Pour la fonction, les indices sont incohérentes avec la déclaration de la fonction

C28275

Le paramètre de _Macro_value_ a la valeur null

C28279

Pour le symbole, un 'begin' a été trouvé sans 'end' correspondant

C28280

Pour le symbole, un 'end' a été trouvé sans 'begin' correspondant

C28282

Les chaînes de format doivent se trouver dans les conditions préalables

C28285

Pour la fonction, une erreur de syntaxe dans le paramètre

C28286

Pour la fonction, une erreur de syntax vers la fin

C28287

Pour la fonction erreur dans l'annotation _At_() (nom de paramètre non reconnu)

C28288

Pour la fonction, erreur dans l'annotation _At_() (nom de paramètre non valide)

C28289

Pour la fonction : ReadableTo ou WritableTo n'a pas eu de spécification de limites en tant que paramètre

C28290

L'annotation pour la fonction contient plus d'Externals que le nombre réel de paramètres

C28291

post null/notnull au niveau 0 deref n'a pas de sens pour la fonction.

C28300

Opérandes d'expression de types incompatibles pour l'opérateur

C28301

Aucune annotation pour la première déclaration de la fonction.

C28302

Un opérateur supplémentaire _Deref_ a été trouvé sur l'annotation.

C28303

Un opérateur ambigu _Deref_ a été trouvé sur l'annotation.

C28304

Un opérateur _Notref_ placé de manière incorrecte a été trouvé appliqué au token.

C28305

Une erreur a été découverte lors de l'analyse du token.

C28306

L'annotation sur le paramètre est obsolète

C28307

L'annotation sur le paramètre est obsolète

C28350

L'annotation décrit une situation qui n'est pas applicable de manière conditionnelle.

C28351

L'annotation décrit lorsqu'une valeur dynamique (une variable) ne peut pas être utilisée dans la condition.

CA1001

Les types qui possèdent des champs supprimables doivent être supprimables

CA1009

Déclarer les gestionnaires d'événements correctement

CA1016

Marquer les assemblys avec AssemblyVersionAttribute

CA1033

Les méthodes d'interface doivent pouvoir être appelées par les types enfants

CA1049

Les types qui possèdent des ressources natives doivent être supprimables

CA1060

Déplacer les P/Invoke vers une classe NativeMethods

CA1061

Ne pas masquer les méthodes de la classe de base

CA1063

Implémenter IDisposable correctement

CA1065

Ne pas lever d'exceptions dans des emplacements inattendus

CA1301

Éviter les accélérateurs en double

CA1400

Des points d'entrée P/Invoke doivent exister

CA1401

Les P/Invoke ne doivent pas être visibles

CA1403

Les types Structurer automatiquement ne doivent pas être visibles par COM

CA1404

Appeler GetLastError immédiatement après P/Invoke

CA1405

Les types de base type visibles par COM doivent être visibles par COM

CA1410

Les méthodes d'inscription COM doivent être mises en correspondance

CA1415

Déclarer correctement les méthodes P/Invoke

CA1821

Supprimer les finaliseurs vides

CA1900

Les champs de type valeur doivent être portables

CA1901

Les déclarations P/Invoke doivent être portables

CA2002

Ne définissez pas un verrou sur des objets à identité faible

CA2100

Rechercher des failles de sécurité dans des requêtes SQL

CA2101

Spécifiez le marshaling pour les arguments de chaîne P/Invoke

CA2108

Vérifiez la sécurité déclarative dans les types valeur

CA2111

Les pointeurs ne doivent pas être visibles

CA2112

Les types sécurisés ne doivent pas exposer de champs

CA2114

La sécurité de la méthode doit être un surensemble du type

CA2116

Les méthodes APTCA doivent uniquement appeler des méthodes APTCA

CA2117

Les types APTCA doivent uniquement étendre des types de base APTCA

CA2122

N'exposez pas indirectement des méthodes avec des demandes de liaison

CA2123

Les demandes de liaison de substitution doivent être identiques au composant de base

CA2124

Incluez dans un wrapper les clauses finally vulnérables dans un bloc try externe

CA2126

Les demandes de liaison de types nécessitent des demandes d'héritage

CA2131

Les types critiques de sécurité ne peuvent pas participer à l'équivalence des types

CA2132

Les constructeurs par défaut doivent être au moins aussi critiques que les constructeurs par défaut de type de base

CA2133

Les délégués doivent lier les méthodes avec une transparence cohérente

CA2134

La transparence des méthodes doit rester cohérente lors de la substitution de méthodes de base

CA2137

Les méthodes transparentes doivent contenir uniquement des IL vérifiables

CA2138

Les méthodes transparentes ne doivent pas appeler les méthodes ayant l'attribut SuppressUnmanagedCodeSecurity

CA2140

Le code transparent ne doit pas faire référence à des éléments critiques de sécurité

CA2141

Les méthodes transparentes ne répondent pas aux LinkDemands

CA2146

Les types doivent être au moins aussi critiques que les types de base et les interfaces

CA2147

Les méthodes transparentes ne peuvent pas utiliser d'assertions de sécurité

CA2149

Les méthodes transparentes ne doivent pas appeler du code natif

CA2200

Levez à nouveau une exception pour conserver les détails de la pile

CA2202

Ne pas supprimer des objets plusieurs fois

CA2207

Initialisez les champs statiques des types valeur en ligne

CA2212

Ne marquez pas les composants pris en charge avec WebMethod

CA2213

Les champs pouvant être supprimés doivent l'être

CA2214

N'appelez pas de méthodes substituables dans les constructeurs

CA2216

Les types pouvant être supprimés doivent déclarer un finaliseur

CA2220

Les finaliseurs doivent appeler le finaliseur de leur classe de base

CA2229

Implémentez des constructeurs de sérialisation

CA2231

Surchargez l'opérateur égal (equals) en remplaçant ValueType.Equals

CA2232

Marquez les points d'entrée Windows Forms avec STAThread

CA2235

Marquez tous les champs non sérialisés

CA2236

Appelez les méthodes de la classe de base sur les types ISerializable

CA2237

Marquer les types ISerializable avec SerializableAttribute

CA2238

Implémentez les méthodes de sérialisation comme il se doit

CA2240

Implémentez ISerializable comme il se doit

CA2241

Fournissez des arguments corrects aux méthodes de mise en forme

CA2242

Effectuez correctement des tests NaN