Fonctionnement du vérificateur de pilote statique
Pour écrire un pilote robuste conforme au modèle de pilote Windows (WDM) ou à l’infrastructure KMDF (Kernel Mode Driver Framework), NDIS ou Storport, vous devez avoir une expertise et comprendre comment le pilote interagit avec le gestionnaire d’E/S. Le test de ces pilotes est tout aussi difficile.
Le développement de pilotes solides peut être difficile pour les raisons suivantes :
Les pilotes sont asynchrones, même sur des machines à processeur unique.
Les conducteurs sont massivement reentrants.
Les pilotes utilisent de nombreuses règles obscures.
Les modèles de pilotes sont évolutifs et vieillissent au fil du temps.
Le test des pilotes de périphérique est limité par les raisons suivantes :
Observation. Vous ne pouvez pas observer une erreur dans l’interaction entre le pilote et le système d’exploitation. Les pilotes peuvent violer les règles d’utilisation implicites, ce qui entraîne un blocage ou un comportement incorrect, mais il est difficile de détecter la cause racine d’une erreur lors du développement et du test des pilotes.
Contrôle. Les pilotes qui fonctionnent correctement dans des circonstances normales peuvent avoir des erreurs subtiles qui se produisent uniquement dans des situations exceptionnelles, par exemple lorsqu’un pilote en dessous de celle-ci dans la pile échoue un IRP. De telles situations sont difficiles à exercer, de sorte que les tests traditionnels ne détectent pas correctement les chemins d’erreur via le code du pilote.
SDV améliore à la fois l’observation et le contrôle que vous avez lorsque vous testez des pilotes. En définissant des règles pour l’utilisation appropriée des fonctions WDM, KMDF, NDIS et Storport et en contrôlant la conformité du pilote avec ces règles, SDV améliore votre capacité à observer les erreurs. Par exemple, la règle WDM LowerDriverReturn spécifie que, dans certaines circonstances, la routine de répartition d’un pilote doit toujours retourner la valeur retournée par le pilote inférieur dans la pile.
SDV augmente également le contrôle en fournissant :
Un modèle hostile de l’environnement du pilote, où plusieurs scénarios pires (tels que les appels de système d’exploitation échouent continuellement) peuvent se produire.
Une analyse statique puissante (appelée vérification de modèle) qui explore systématiquement tous les chemins d’exécution possibles dans le pilote.
SDV est un outil de test unitaire essentiel pour les pilotes de périphérique. Il place un pilote dans un environnement hostile et teste systématiquement les chemins de code via le pilote en recherchant des violations des règles d’utilisation du modèle de pilote.
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.