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 |
---|---|
avertissement C28101 : Le module Pilotes a déduit que la fonction actuelle n’est pas le type correct de fonction |
|
avertissement C28110 : Les pilotes doivent protéger l’état du matériel à virgule flottante. Voir l’utilisation de float |
|
avertissement C28111 : L’IRQL où l’état à virgule flottante a été enregistré ne correspond pas à l’IRQL actuel (pour cette opération de restauration). |
|
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. |
|
avertissement C28120 : La fonction n’est pas autorisée à être appelée au niveau IRQ actuel. Le niveau actuel est trop faible. |
|
avertissement C28121 : La fonction n’est pas autorisée à être appelée au niveau IRQ actuel. Le niveau actuel est trop élevé. |
|
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. |
|
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. |
|
avertissement C28124 : L’appel à entraîne la définition du niveau IRQ en dessous du minimum acceptable pour la fonction analysée. |
|
avertissement C28126 : Le paramètre AccessMode pour ObReferenceObject* doit être IRP-RequestorMode> |
|
avertissement C28127 : La fonction utilisée comme routine ne correspond pas exactement au type attendu. |
|
avertissement C28128 : Un accès à un champ a été effectué directement. Il doit être fait par une routine. |
|
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 |
|
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 |
|
avertissement C28132 : Prise de la taille du pointeur |
|
avertissement C28133 : IoInitializeTimer est mieux appelé à partir d’AddDevice |
|
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 |
|
avertissement C28135 : Si le premier argument de KeWaitForSingleObject est une variable locale, le paramètre Mode doit être KernelMode |
|
avertissement C28139 : L’argument doit correspondre exactement au type |
|
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 |
|
avertissement C28143 : Une routine de dispatch qui appelle IoMarkIrpPending doit également retourner STATUS_PENDING |
|
avertissement C28144 : Dans une routine d’annulation, au point de sortie, l’IRQL dans Irp-CancelIrql> doit être l’IRQL actuel. |
|
avertissement C28145 : La structure MDL opaque ne doit pas être modifiée par un pilote |
|
avertissement C28146 : Les pilotes en mode noyau doivent utiliser ntstrsafe.h, et non strsafe.h. Trouvé dans le fichier source |
|
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 |
|
avertissement C28150 : La fonction entraîne la définition du niveau IRQ au-dessus de la valeur maximale acceptable pour la fonction analysée |
|
avertissement C28151 : La valeur n’est pas une valeur légale pour un IRQL |
|
avertissement C28152 : Le retour d’une fonction de type AddDevice de manière inattendue DO_DEVICE_INITIALIZING |
|
avertissement C28153 : La valeur d’une annotation IRQL n’a pas pu être évaluée dans ce contexte. |
|
avertissement C28156 : L’IRQL réel est incompatible avec l’IRQL requis |
|
avertissement C28157 : L’IRQL n’a jamais été restauré |
|
avertissement C28158 : Aucun IRQL n’a été enregistré |
|
avertissement C28161 : Quitter sans acquérir le droit d’utiliser du matériel flottant |
|
avertissement C28162 : Fermeture tout en conservant le droit d’utiliser du matériel à virgule flottante |
|
avertissement C28165 : Le pointeur de fonction de la classe ne correspond pas à la classe de fonction |
|
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. |
|
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é. |
|
avertissement C28168 : la fonction dispatch n’a pas d’annotation Dispatch_type correspondant à cette entrée de table de répartition |
|
avertissement C28169 : La fonction dispatch n’a pas d’annotations Dispatch_type |
|
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 |
|
avertissement C28171 : La fonction a plusieurs instance de PAGED_CODE ou PAGED_CODE_LOCKED |
|
avertissement C28172 : la fonction a PAGED_CODE ou PAGED_CODE_LOCKED mais n’est pas déclarée comme étant dans un segment paginé |
|
avertissement C28173 : La fonction actuelle semble s’adapter incorrectement à la mémoire physique supérieure à 4 Go |
|
avertissement C28175 : Le membre de struct ne doit pas être accessible par un pilote |
|
avertissement C28176 : Le membre de struct ne doit pas être modifié par un pilote |
|
avertissement C28177 : La fonction est annotée avec plusieurs classes de fonction. Tous, sauf un, seront ignorés. |
|
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 |
|
Une erreur de syntaxe dans les annotations a été trouvée pour la propriété dans la fonction . |
|
avertissement C28268 : la classe de fonction sur la fonction ne correspond pas à la classe de fonction sur le typedef utilisé ici |
|
avertissement C28601 : Éviter le blocage sur HWND_BROADCAST |
|
avertissement C28602 : Évitez d’appeler SendMessageTimeout avec HWND_BROADCAST |
|
avertissement C28604 : Évitez d’appeler SendMessageTimeout avec SMTO_ABORTIFHUNG avec un délai d’expiration de 0 |
|
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() |
|
avertissement C28616 : Condition AV multithread |
|
avertissement C28617 : Évitez d’utiliser la valeur de retour de _beginthread(). Utilisez _beginthreadex() à la place |
|
avertissement C28623 : Cast non signé des coordonnées GetMessagePos(). Utilisez GET_X_LPARAM/GET_Y_LPARAM au lieu de LOWORD/HIWORD |
|
avertissement C28624 : Aucun appel à Release() pour faire correspondre le nombre de références incrémenté à partir de LResultFromObject |
|
avertissement C28625 : L’appel de fonction utilisé pour effacer les données sensibles sera optimisé |
|
avertissement C28636 : Appel de LocalFree sur un pointeur non alloué obtenu à partir d’appels vers GetSecurityDescriptorOwner/Group/Dacl/Sacl |
|
avertissement C28637 : L’appel de la fonction dans un initialiseur global n’est pas sécurisé |
|
avertissement C28638 : il manque une déclaration correspondante au stub du chargement différé de la fonction |
|
avertissement C28639 : Appel du handle de fermeture avec chaîne |
|
avertissement C28640 : le stub du chargement différé de la fonction doit être une fonction statique |
|
avertissement C28644 : Valeur de retour de DPA_InsertPtr non vérifiée |
|
avertissement C28645 : MessageBox a été appelé à l’aide du symbole de message de point d’interrogation qui n’est plus recommandé |
|
avertissement C28648 : PulseEvent est une fonction peu fiable |
|
avertissement C28649 : Les tableaux de pile automatique ou global ne sont jamais NULL |
|
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. |
|
avertissement C28651 : L’initialiseur statique provoque la copie sur les pages d’écriture en raison des pointeurs de fonction membre |
|
avertissement C28652 : L’initialiseur statique provoque la copie sur les pages d’écriture en raison d’opérateurs surchargés au niveau du bit |
|
avertissement C28714 : Cast entre des types entiers sémantiquement différents |
|
avertissement C28715 : Cast entre des types entiers sémantiquement différents |
|
avertissement C28716 : cast inséré dans le compilateur entre différents types d’intégrales sémantiquement différents |
|
avertissement C28717 : Type VARIANT non valide |
|
avertissement C28718 : Mémoire tampon non annotée |
|
avertissement C28719 : Utilisation de l’API interdite |
|
avertissement C28720 : Utilisation de l’API interdite |
|
avertissement C28721 : Architecture de compteur de performances déconseillée |
|
avertissement C28722 : Mémoire tampon non annotée dans la déclaration de fonction |
|
avertissement C28723 : mémoire tampon non annotée dans la définition de fonction qui n’a aucune déclaration correspondante |
|
avertissement C28725 : Utiliser Watson au lieu de ce SetUnhandledExceptionFilter |
|
avertissement C28726 : Utilisation de l’API interdite |
|
avertissement C28727 : Utilisation de l’API interdite |
|
avertissement C28728 : Utilisation de l’API interdite |
|
avertissement C28730 : Attribution possible de « \0 » directement à un pointeur. |
|
avertissement C28735 : Utilisation de l’API Crimson interdite |
|
avertissement C28736 : Utilisation de l’argument d’API interdite |
|
avertissement C28740 : Mémoire tampon non signée non annotée |
|
avertissement C28741 : Mémoire tampon non annotée dans la fonction |
|
avertissement C28742 : Mémoire tampon non annotée dans la fonction |
|
avertissement C28750 : Utilisation interdite de lstrlen et de ses variantes |
|
avertissement C28751 : Utilisation interdite d’ExAllocatePool et de ses variantes |
|
avertissement C28752 : Utilisation interdite de l’API kernel32 ou advapi32 |
|
avertissement C28753 : S’appuyer sur l’ordre non défini d’évaluation des paramètres |
|
avertissement C30029 : Appel d’une fonction d’allocation de mémoire qui demande de la mémoire exécutable |
|
avertissement C30030 : Appel d’une fonction d’allocation de mémoire et passage d’un paramètre qui indique la mémoire exécutable |
|
avertissement C30031 : Appel d’une fonction d’allocation de mémoire et passage d’un paramètre qui indique la mémoire exécutable |
|
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 |
|
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. |
|
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. |
|
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. |
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour