Pilotes pris en charge
Pour que SDV vérifie un pilote, il doit être en mesure d’interpréter le code du pilote, en particulier, les points d’entrée du pilote et le code dans les fonctions et les routines qui prennent en charge les fonctionnalités de pilote requises.
Les sections suivantes décrivent les exigences de base pour les pilotes et la syntaxe spécifique attendue par SDV des pilotes qu’il vérifie. SDV ne vérifie pas que les conducteurs respectent ces exigences, mais si le pilote ne se conforme pas, SDV peut ne pas s’exécuter et, dans de rares cas, il signale des résultats faux positifs ou faux négatifs en raison d’une mauvaise interprétation.
Important
SDV n’est plus pris en charge et SDV n’est plus disponible dans les versions wdK ou EWDK de Windows 24H2. Il n’est pas disponible dans les kits WDK plus récents que la build 26017 et n’est pas inclus dans windows 24H2 RTM WDK.
SDV peut toujours être utilisé en téléchargeant windows 11, version 22H2 EWDK (publiée le 24 octobre 2023) avec Visual Studio Build Tools 17.1.5 à partir du téléchargement du Kit de pilotes Windows (WDK). Seule l’utilisation du kit WDK Entreprise pour exécuter SDV est recommandée. L’utilisation de versions antérieures de WDK standard conjointement avec les versions récentes de Visual Studio n’est pas recommandée, car cela entraînera probablement des échecs d’analyse.
À l’avenir, CodeQL sera l’outil d’analyse statique principal pour les pilotes. CodeQL fournit un langage de requête puissant qui traite le code comme une base de données à interroger, ce qui facilite l’écriture de requêtes pour des comportements, des modèles spécifiques, etc.
Pour plus d’informations sur l’utilisation de CodeQL, consultez CodeQL et le test du logo Static Tools.
Caractéristiques du pilote de base
SDV est en mesure de vérifier uniquement les pilotes présentant les caractéristiques suivantes :
SDV vérifie les pilotes et les bibliothèques écrits en C et C++.
SDV effectue une vérification complète uniquement sur les pilotes de périphériques compatibles KMDF et WDM (pilotes de fonction, pilotes de filtre et pilotes de bus), pilotes NDIS (filtre, miniport et pilotes de protocole) et pilotes Storport.
SDV tente une vérification limitée des propriétés génériques (telles que NullCheck) sur les pilotes qui ne correspondent pas aux catégories ci-dessus.
SDV peut vérifier les pilotes WDM qui déclarent leurs fonctions de rappel de pilote à l’aide des types de rôles de fonction WDM. Pour plus d’informations sur la façon de déclarer des fonctions, consultez La déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes WDM.
SDV peut vérifier les pilotes générés à partir de l’infrastructure de pilote en mode noyau, à condition de déclarer chaque fonction de rappel à l’aide d’un type de rôle de fonction de rappel SDV-KMDF. Pour plus d’informations, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes KMDF.
SDV peut vérifier les pilotes NDIS, à condition d’annoter chaque fonction de rappel avec la déclaration de fonction à l’aide d’un type de fonction de rappel SDV-NDIS. Pour plus d’informations, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes NDIS.
SDV peut vérifier les pilotes Storport, à condition d’annoter chaque fonction de rappel avec la déclaration de fonction. Pour ce faire, utilisez un type de fonction de rappel SDV-Storport. Pour plus d’informations, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes Storport.
Configuration requise pour les pilotes de base
Pour que SDV vérifie un pilote WDM, le pilote doit :
Include Wdm.h ou Ntddk.h (Wdm.h est un sous-ensemble de Ntddk.h).
Créez des objets d’appareil à l’aide de méthodes décrites dans Introduction aux objets d’appareil et suivantes.
Avoir une routine de déchargement écrite comme recommandé dans l’écriture d’une routine de déchargement.
Déclarez chaque fonction de répartition à l’aide d’une déclaration de type de rôle de fonction, décrite dans Utilisation des déclarations de type de rôle de fonction. Pour plus d’informations sur les types de rôles WDM et les annotations _Dispatch_type_ (type), consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes WDM.
Pour que SDV vérifie un pilote KMDF, le pilote doit :
Incluez Wdf.h et Ntddk.h.
Créez les objets KMDF décrits dans Utilisation de l’infrastructure pour développer un pilote.
Annotez chaque fonction de rappel à l’aide d’un type de rôle de fonction de rappel SDV-KMDF, décrit dans Utilisation des déclarations de type de rôle de fonction. Pour obtenir la liste des types de rôles pris en charge, consultez Les déclarations de fonction KMDF du vérificateur de pilotes statiques.
Pour que SDV vérifie un pilote NDIS, le pilote doit :
Incluez Ndis.h et Ntddk.h.
Suivez les instructions du Guide de conception réseau pour créer des pilotes NDIS.
Annotez chaque fonction de rappel à l’aide d’un type de rôle de fonction de rappel SDV-NDIS, comme décrit dans Utilisation des déclarations de type de rôle de fonction. Pour obtenir la liste des types de rôles pris en charge, consultez Les déclarations de fonction NDIS du vérificateur de pilotes statiques.
En outre, SDV peut vérifier les pilotes qui prennent en charge :
Noms de fonctions réservées
Le moteur de vérification SDV ne fonctionne pas correctement lorsque le pilote ou le code de la bibliothèque utilise les mêmes modèles de noms de fonction que SDV en interne.
Plus précisément, SDV n’interprète pas correctement le code si :
Le code inclut des noms de fonction commençant par __init et suivis d’un ou plusieurs entiers, tels que __init123.
Le code inclut des noms de fonction commençant par sdv_, tels que sdv_Func, ou inclure la chaîne _sdv_, telle que Func_sdv_ ou Func_sdv_foo.
La bibliothèque utilise un
.def
fichier pour renommer une fonction exportée et le nom externe est identique au nom d’une autre fonction statique dans la bibliothèque.
Si le code du pilote ou le code de bibliothèque inclut ces éléments, SDV tente de vérifier le pilote ou de traiter la bibliothèque, mais le résultat n’est pas pris en charge par la fonctionnalité (NSF). Pour plus d’informations sur les résultats SDV, consultez Interprétation des résultats du vérificateur de pilote statique.