Avertissements de l'analyse du code pour les pilotes

Cette section répertorie et décrit les avertissements signalés par l’analyse du code pour les pilotes lorsqu’elle détecte une erreur possible dans le code du pilote. Notez que certains avertissements sont destinés au code en mode noyau et peuvent être ignorés lors de l’analyse des pilotes en mode utilisateur.

L’analyse du code pour les pilotes signale les types d’avertissements suivants :

  • Avertissements généraux (6000-6999) : erreurs potentielles dans la syntaxe C et C++ et la pratique de codage général. Pour obtenir une description de ces avertissements, consultez Analyse du code pour les avertissements C/C++.

  • Avertissements spécifiques à Windows (28600-28799) : ces avertissements sont spécifiques à certains modèles d’utilisation dans Windows, mais ne sont pas spécifiques aux pilotes.

  • Avertissements spécifiques au pilote (28100-28199) : erreurs dans l’interaction d’un pilote avec l’application, avec d’autres pilotes et avec le système d’exploitation.

  • Erreurs d’annotation (28200-28299 et 36000-36999) : ces avertissements indiquent qu’une annotation a été mal codée ou utilisée dans un contexte incorrect. Dans la plupart des cas, la présence d’un tel avertissement indique que l’annotation n’a pas l’effet souhaité (ou aucun).

  • Avertissements d’allocation de mémoire (30029-30035) : il s’agit d’avertissements d’allocation de mémoire.

Dans cette section

Rubrique Description

C28101

avertissement C28101 : Le module Pilotes a déduit que la fonction actuelle n’est pas le type correct de fonction

C28110

avertissement C28110 : Les pilotes doivent protéger l’état du matériel à virgule flottante. Voir l’utilisation de float

C28111

avertissement C28111 : L’IRQL où l’état à virgule flottante a été enregistré ne correspond pas à l’IRQL actuel (pour cette opération de restauration).

C28114

avertissement : C28114 : la copie d’une entrée de pile IRP entière laisse certains champs initialisés qui doivent être effacés ou mis à jour.

C28120

avertissement C28120 : La fonction n’est pas autorisée à être appelée au niveau IRQ actuel. Le niveau actuel est trop faible.

C28121

avertissement C28121 : La fonction n’est pas autorisée à être appelée au niveau IRQ actuel. Le niveau actuel est trop élevé.

C28122

avertissement C28122 : La fonction n’est pas autorisée à être appelée à un niveau IRQ faible. Les appels de fonction antérieurs ne sont pas compatibles avec cette contrainte.

C28123

avertissement C28123 : La fonction n’est pas autorisée à être appelée à un niveau IRQ élevé. Les appels de fonction antérieurs ne sont pas compatibles avec cette contrainte.

C28124

avertissement C28124 : L’appel à entraîne la définition du niveau IRQ en dessous du minimum acceptable pour la fonction analysée.

C28126

avertissement C28126 : Le paramètre AccessMode pour ObReferenceObject* doit être IRP-RequestorMode>

C28127

avertissement C28127 : La fonction utilisée comme routine ne correspond pas exactement au type attendu.

C28128

avertissement C28128 : Un accès à un champ a été effectué directement. Il doit être fait par une routine.

C28129

avertissement C28129 : Une affectation a été effectuée à un opérande, qui ne doit être modifié qu’à l’aide de jeux de bits et d’effacements

C28131

avertissement C28131 : La routine DriverEntry doit enregistrer une copie de l’argument, et non le pointeur, car le Gestionnaire d’E/S libère la mémoire tampon

C28132

avertissement C28132 : Prise de la taille du pointeur

C28133

avertissement C28133 : IoInitializeTimer est mieux appelé à partir d’AddDevice

C28134

avertissement C28134 : Le type d’une balise de pool doit être intégral, et non pas une chaîne ou un pointeur de chaîne

C28135

avertissement C28135 : Si le premier argument de KeWaitForSingleObject est une variable locale, le paramètre Mode doit être KernelMode

C28139

avertissement C28139 : L’argument doit correspondre exactement au type

C28141

avertissement C28141 : L’argument entraîne la définition du niveau IRQ en dessous de l’IRQL actuel, et cette fonction ne peut pas être utilisée à cette fin

C28143

avertissement C28143 : Une routine de dispatch qui appelle IoMarkIrpPending doit également retourner STATUS_PENDING

C28144

avertissement C28144 : Dans une routine d’annulation, au point de sortie, l’IRQL dans Irp-CancelIrql> doit être l’IRQL actuel.

C28145

avertissement C28145 : La structure MDL opaque ne doit pas être modifiée par un pilote

C28146

avertissement C28146 : Les pilotes en mode noyau doivent utiliser ntstrsafe.h, et non strsafe.h. Trouvé dans le fichier source

C28147

avertissement C28147 : L’utilisation d’une balise de pool par défaut (« kdD » ou « mdW ») pour les appels à cette fonction va à l’encontre de l’objectif du balisage de pool

C28150

avertissement C28150 : La fonction entraîne la définition du niveau IRQ au-dessus de la valeur maximale acceptable pour la fonction analysée

C28151

avertissement C28151 : La valeur n’est pas une valeur légale pour un IRQL

C28152

avertissement C28152 : Le retour d’une fonction de type AddDevice de manière inattendue DO_DEVICE_INITIALIZING

C28153

avertissement C28153 : La valeur d’une annotation IRQL n’a pas pu être évaluée dans ce contexte.

C28156

avertissement C28156 : L’IRQL réel est incompatible avec l’IRQL requis

C28157

avertissement C28157 : L’IRQL n’a jamais été restauré

C28158

avertissement C28158 : Aucun IRQL n’a été enregistré

C28161

avertissement C28161 : Quitter sans acquérir le droit d’utiliser du matériel flottant

C28162

avertissement C28162 : Fermeture tout en conservant le droit d’utiliser du matériel à virgule flottante

C28165

avertissement C28165 : Le pointeur de fonction de la classe ne correspond pas à la classe de fonction

C28166

avertissement C28166 : La fonction ne restaure pas l’IRQL à la valeur qui était en cours à l’entrée de la fonction et doit le faire.

C28167

avertissement C28167 : La fonction modifie l’IRQL et ne restaure pas l’IRQL avant sa fermeture. Il doit être annoté pour refléter la modification ou l’IRQL doit être restauré.

C28168

avertissement C28168 : la fonction dispatch n’a pas d’annotation Dispatch_type correspondant à cette entrée de table de répartition

C28169

avertissement C28169 : La fonction dispatch n’a pas d’annotations Dispatch_type

C28170

avertissement C28170 : la fonction a été déclarée dans un segment paginé, mais ni PAGED_CODE ni PAGED_CODE_LOCKED n’a été trouvée

C28171

avertissement C28171 : La fonction a plusieurs instance de PAGED_CODE ou PAGED_CODE_LOCKED

C28172

avertissement C28172 : la fonction a PAGED_CODE ou PAGED_CODE_LOCKED mais n’est pas déclarée comme étant dans un segment paginé

C28173

avertissement C28173 : La fonction actuelle semble s’adapter incorrectement à la mémoire physique supérieure à 4 Go

C28175

avertissement C28175 : Le membre de struct ne doit pas être accessible par un pilote

C28176

avertissement C28176 : Le membre de struct ne doit pas être modifié par un pilote

C28177

avertissement C28177 : La fonction est annotée avec plusieurs classes de fonction. Tous, sauf un, seront ignorés.

C28260

avertissement C28260 : Une erreur de syntaxe dans les annotations a été détectée lors de l’analyse d’une propriété à l’intérieur d’une fonction

C28266

Une erreur de syntaxe dans les annotations a été trouvée pour la propriété dans la fonction .

C28268

avertissement C28268 : la classe de fonction sur la fonction ne correspond pas à la classe de fonction sur le typedef utilisé ici

C28601

avertissement C28601 : Éviter le blocage sur HWND_BROADCAST

C28602

avertissement C28602 : Évitez d’appeler SendMessageTimeout avec HWND_BROADCAST

C28604

avertissement C28604 : Évitez d’appeler SendMessageTimeout avec SMTO_ABORTIFHUNG avec un délai d’expiration de 0

C28615

avertissement C28615 : Doit appeler _resetstkoflw dans le bloc __except() lors de l’appel de _alloca dans le bloc __try. N’appelez pas _resetstkoflw à partir d’un bloc catch()

C28616

avertissement C28616 : Condition AV multithread

C28617

avertissement C28617 : Évitez d’utiliser la valeur de retour de _beginthread(). Utilisez _beginthreadex() à la place

C28623

avertissement C28623 : Cast non signé des coordonnées GetMessagePos(). Utilisez GET_X_LPARAM/GET_Y_LPARAM au lieu de LOWORD/HIWORD

C28624

avertissement C28624 : Aucun appel à Release() pour faire correspondre le nombre de références incrémenté à partir de LResultFromObject

C28625

avertissement C28625 : L’appel de fonction utilisé pour effacer les données sensibles sera optimisé

C28636

avertissement C28636 : Appel de LocalFree sur un pointeur non alloué obtenu à partir d’appels vers GetSecurityDescriptorOwner/Group/Dacl/Sacl

C28637

avertissement C28637 : L’appel de la fonction dans un initialiseur global n’est pas sécurisé

C28638

avertissement C28638 : il manque une déclaration correspondante au stub du chargement différé de la fonction

C28639

avertissement C28639 : Appel du handle de fermeture avec chaîne

C28640

avertissement C28640 : le stub du chargement différé de la fonction doit être une fonction statique

C28644

avertissement C28644 : Valeur de retour de DPA_InsertPtr non vérifiée

C28645

avertissement C28645 : MessageBox a été appelé à l’aide du symbole de message de point d’interrogation qui n’est plus recommandé

C28648

avertissement C28648 : PulseEvent est une fonction peu fiable

C28649

avertissement C28649 : Les tableaux de pile automatique ou global ne sont jamais NULL

C28650

avertissement C28650 : le type pour lequel !0 est utilisé ne le traite pas comme un cas d’échec.

Retourne une valeur status telle que ! TRUE n’est pas la même chose que le retour d’une valeur status qui indique un échec.

C28651

avertissement C28651 : L’initialiseur statique provoque la copie sur les pages d’écriture en raison des pointeurs de fonction membre

C28652

avertissement C28652 : L’initialiseur statique provoque la copie sur les pages d’écriture en raison d’opérateurs surchargés au niveau du bit

C28714

avertissement C28714 : Cast entre des types entiers sémantiquement différents

C28715

avertissement C28715 : Cast entre des types entiers sémantiquement différents

C28716

avertissement C28716 : cast inséré dans le compilateur entre différents types d’intégrales sémantiquement différents

C28717

avertissement C28717 : Type VARIANT non valide

C28718

avertissement C28718 : Mémoire tampon non annotée

C28719

avertissement C28719 : Utilisation de l’API interdite

C28720

avertissement C28720 : Utilisation de l’API interdite

C28721

avertissement C28721 : Architecture de compteur de performances déconseillée

C28722

avertissement C28722 : Mémoire tampon non annotée dans la déclaration de fonction

C28723

avertissement C28723 : mémoire tampon non annotée dans la définition de fonction qui n’a aucune déclaration correspondante

C28725

avertissement C28725 : Utiliser Watson au lieu de ce SetUnhandledExceptionFilter

C28726

avertissement C28726 : Utilisation de l’API interdite

C28727

avertissement C28727 : Utilisation de l’API interdite

C28728

avertissement C28728 : Utilisation de l’API interdite

C28730

avertissement C28730 : Attribution possible de « \0 » directement à un pointeur.

C28735

avertissement C28735 : Utilisation de l’API Crimson interdite

C28736

avertissement C28736 : Utilisation de l’argument d’API interdite

C28740

avertissement C28740 : Mémoire tampon non signée non annotée

C28741

avertissement C28741 : Mémoire tampon non annotée dans la fonction

C28742

avertissement C28742 : Mémoire tampon non annotée dans la fonction

C28750

avertissement C28750 : Utilisation interdite de lstrlen et de ses variantes

C28751

avertissement C28751 : Utilisation interdite d’ExAllocatePool et de ses variantes

C28752

avertissement C28752 : Utilisation interdite de l’API kernel32 ou advapi32

C28753

avertissement C28753 : S’appuyer sur l’ordre non défini d’évaluation des paramètres

C30029

avertissement C30029 : Appel d’une fonction d’allocation de mémoire qui demande de la mémoire exécutable

C30030

avertissement C30030 : Appel d’une fonction d’allocation de mémoire et passage d’un paramètre qui indique la mémoire exécutable

C30031

avertissement C30031 : Appel d’une fonction d’allocation de mémoire et passage d’un paramètre qui indique la mémoire exécutable

C30032

avertissement C30032 : Appel d’une fonction d’allocation de mémoire et forçage de la demande de mémoire exécutable via l’utilisation de la directive POOL_NX_OPTOUT

C30033

avertissement C30033 : L’allocation d’exécutables a été détectée dans un pilote compilé avec POOL_NX_OPTIN. Ce pilote a été déterminé comme étant chargé au moment de l’exécution par un autre pilote. Vérifiez que le pilote de chargement appelle ExInitializeDriverRuntime(DrvRtPoolNxOptIn) dans son DriverEntry.

C30034

avertissement C30034 : Passage d’une valeur d’indicateur à une fonction d’allocation pouvant entraîner l’allocation de mémoire exécutable. Vérifiez que la fonction d’allocation ne demande pas une forme de pool non paginé exécutable.

C30035

avertissement C30035 : Un appel a été effectué à une fonction qui doit être effectuée à partir de la fonction d’initialisation (par exemple, DriverEntry() ou DllInitialize()). PREfast n’a pas pu déterminer si l’appel a été effectué à partir de la fonction d’initialisation.