Tests PnP (principes de base de l’appareil)
Les tests PnP de base de l’appareil forcent un pilote à gérer la quasi-totalité des IP PnP ; toutefois, trois domaines sont spécifiquement mis en évidence : l’enlèvement, le rééquilibrage et le retrait surprise. Le test PnP fournit un mécanisme permettant de tester chacun de ces éléments séparément ou de les tester tous ensemble (c’est-à-dire en tant que test de contrainte). Ce test PnP est effectué à l’aide d’une combinaison d’appels d’API en mode utilisateur (via l’application de test) et d’appels d’API en mode noyau (via un pilote de filtre supérieur).
Tests PNP
Les tests de Plug-and-Play (PnP) exécutent différents chemins de code pnP dans les composants de pilote et de mode utilisateur. Les tests PnP doivent être exécutés avec driver Verifier activé sur l’ordinateur de test. Pour plus d’informations sur l’activation du vérificateur de pilotes, consultez Propriétés du vérificateur de pilotes pour les projets de pilotes.
Test | Description |
---|---|
Désactiver la prise en charge des tests d’appareil améliorés (EDT) |
Ce test désinstalle le pilote de filtre de test (msdmfilt.sys) en tant que filtre supérieur sur les appareils spécifiés à l’aide du paramètre DQ. Ce filtre de test est installé dans le cadre de l’exécution de tests dans cette catégorie de test Paramètres : - consultez Paramètres de test de base de l’appareil DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO IOType |
Redémarrage PNP (désactiver et activer) avec des E/S avant et après |
Ce test effectue la désactivation/l’activation pnP de base et les E/S sur les appareils avec un redémarrage du système. Binaire de test : Devfund_PNP_DisableEnable_Reboot_With_IO_BeforeAndAfter.wsc Méthode de test : PNP_DisableEnable_Reboot_With_IO_Before_And_After Paramètres : - consultez Paramètres de test de base de l’appareil DQ IOPeriod |
PNP (désactiver et activer) avec E/S avant et après |
Ce test permet de désactiver/activer les E/S et les pnP de base sur les appareils. Ce test effectue les opérations suivantes :
Binaire de test : Devfund_PNP_DisableEnable_With_IO_BeforeAndAfter.wsc Méthode de test : PNP_DisableEnable_With_IO_Before_And_After Paramètres : - consultez Paramètres de test de base de l’appareil DQ IOPeriod |
Test PNP Cancel Remove Device |
Ce test utilise le pilote de filtre EDT pour envoyer des IRP_MN_CANCEL_REMOVE_DEVICE aux piles d’appareils cibles. Pour plus d’informations, consultez À propos des tests de suppression d’appareil. Binaire de test : Devfund_PnPDTest.dll Méthode de test : PNPCancelRemoveDevice Paramètres : - consultez Paramètres de test de base de l’appareil DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Test PNP Cancel Stop Device |
Ce test utilise le pilote de filtre EDT pour envoyer des IRP_MN_CANCEL_STOP_DEVICE aux piles d’appareils cibles. Pour plus d’informations, consultez À propos des tests de rééquilibrage. Binaire de test : Devfund_PnPDTest.dll Méthode de test : PNPCancelStopDevice Paramètres : - consultez Paramètres de test de base de l’appareil DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP DIF Remove Device Test |
Ce test utilise l’API SetupDi pour envoyer une DIF_REMOVE demande de suppression de l’appareil par les programmes d’installation. Binaire de test : Devfund_PnPDTest.dll Méthode de test : PNPDIFRemoveAndRescanParentDevice Paramètres : - consultez Paramètres de test de base de l’appareil DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Test PNP Désactiver et activer l’appareil |
Ce test désactive et active les appareils cibles. Binaire de test : Devfund_PnPDTest.dll Méthode de test : PNPDisableAndEnableDevice Paramètres : - consultez Paramètres de test de base de l’appareil DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO IOType |
Test PNP Rééquilibrage d’échec du redémarrage de l’appareil |
Ce test utilise le pilote de filtre EDT pour essayer d’envoyer des IRP_MN_STOP_DEVICE aux piles d’appareils cibles. Le pilote de filtre EDT échoue ensuite IRP_MN_START_DEVICE requêtes (qui suivent IRP_MN_STOP_DEVICE demandes) pour déclencher la suppression surprise des appareils cibles. Pour plus d’informations, consultez À propos des tests de rééquilibrage. Binaire de test : Devfund_PnPDTest.dll Méthode de test : PNPTryStopDeviceAndFailRestart Paramètres : - consultez Paramètres de test de base de l’appareil DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP Rééquilibrer la demande De nouvelles ressources Test de l’appareil |
Ce test utilise le pilote de filtre EDT pour essayer d’envoyer IRP_MN_STOP_DEVICE aux piles de périphériques cibles. Il manipule également les besoins en ressources des appareils pour optimiser les chances que de nouvelles ressources soient allouées aux appareils. Pour plus d’informations, consultez À propos des tests de rééquilibrage. Binaire de test : Devfund_PnPDTest.dll Méthode de test : PNPTryStopDeviceRequestNewResourcesAndRestartDevice Paramètres : - consultez Paramètres de test de base de l’appareil DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP Remove Device Test |
Ce test entraîne l’envoi de IRP_MN_QUERY_REMOVE_DEVICE et de IRP_MN_REMOVE_DEVICE aux piles d’appareils cibles. Pour plus d’informations, consultez À propos des tests de suppression d’appareil. Binaire de test : Devfund_PnPDTest.dll Méthode de test : PNPRemoveAndRestartDevice Paramètres : - consultez Paramètres de test de base de l’appareil DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Test de l’appareil PNP Stop (Rééquilibrer) |
Ce test utilise le pilote de filtre EDT pour essayer d’envoyer IRP_MN_STOP_DEVICE aux piles de périphériques cibles. Pour plus d’informations, consultez À propos des tests de rééquilibrage. Binaire de test : Devfund_PnPDTest.dll Méthode de test : PNPTryStopAndRestartDevice Paramètres : - consultez Paramètres de test de base de l’appareil DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Test PNP Surprise Remove Device |
Ce test utilise le pilote de filtre EDT pour envoyer des IRP_MN_SURPRISE_REMOVAL aux piles de périphériques cibles. Pour plus d’informations, consultez À propos du test de suppression surprise. Binaire de test : Devfund_PnPDTest.dll Méthode de test : PNPSurpriseRemoveAndRestartDevice Paramètres : - consultez Paramètres de test de base de l’appareil DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
À propos des tests de suppression d’appareil
- PNP Remove Device Test
- Test PNP Cancel Remove Device
Le test de suppression d’appareil englobe IRP_MN_QUERY_REMOVE_DEVICE, IRP_MN_CANCEL_REMOVE_DEVICE et IRP_MN_REMOVE_DEVICE.
Le test tente d’installer son pilote de filtre supérieur sur la pile de périphériques cibles. Cette tentative entraîne un IRP de suppression de requête.
Si cette IRP de suppression de requête échoue, le test redémarre l’ordinateur pour obtenir le pilote de filtre sur la pile des appareils. Si la demande de suppression n’est pas bloquée, la pile de périphériques est supprimée et redémarrée avec le pilote de filtre sur la pile de périphériques.
Le test, à l’aide des API d’installation, entraîne l’envoi d’une IRP de suppression de requête à la pile des appareils. Le pilote de filtre échoue à cette demande de suppression, de sorte qu’un IRP cancel-remove est envoyé. Le pilote de filtre affirme que l’annulation et la suppression ont réussi.
Ensuite, l’application de test appelle le programme d’installation de classe approprié et tous les co-programmes d’installation inscrits pour désactiver, activer et supprimer ou ré-énumérer l’appareil (cela teste la classe et co-programme d’installation de DIF_PROPERTYCHANGE avec DICS_DISABLE, DICS_ENABLE et DICS_PROPCHANGE). Lors de la réception de IRP_MN_REMOVE_DEVICE, le pilote de filtre affirme que les pilotes inférieurs l’ont réussi.
Chacune de ces étapes implique une demande de suppression préliminaire. Si cette demande est bloquée, l’appareil ne sera pas supprimé. Vous pouvez choisir d’opposer votre veto à une demande de suppression le cas échéant, par exemple lors de la diffusion de vidéos sur une caméra USB ou si l’appareil cible se trouve dans le chemin de démarrage ou de pagination. N’oubliez pas que le simple échec de toutes les demandes de suppression n’est généralement pas une bonne pratique. L’échec de toutes les demandes de suppression ne garantit pas que le pilote ne recevra jamais de suppression, car un IRP de suppression sera toujours émis après une suppression surprise, ou si quelqu’un dans la pile des appareils échoue à une IRP de démarrage.
À propos du test de suppression surprise
- Test PNP Surprise Remove Device
Le test De suppression surprise englobe IRP_MN_SURPRISE_REMOVAL suivis de IRP_MN_REMOVE_DEVICE.
Comme avec les tests précédents, l’application de test tente d’ajouter un filtre supérieur à la pile d’appareils cible, puis de redémarrer la pile. Si cette tentative échoue, le test redémarre l’ordinateur.
Lorsqu’il est déclenché par l’application de test, le pilote de filtre entraîne l’envoi par le système d’un IRP_MN_SURPRISE_REMOVAL à la pile des appareils, suivi d’un IRP_MN_REMOVE_DEVICE. Le pilote de filtre affirme que ces deux runtimes d’intégration sont correctement effectués par des pilotes inférieurs.
Une fois le test de suppression surprise terminé, l’appareil est désinstallé et réinumé, ce qui supprime également le pilote de filtre de la pile.
À propos des tests de rééquilibrage
- Test de l’appareil PNP Stop (Rééquilibrer)
- PNP Rééquilibrer la demande De nouvelles ressources Test de l’appareil
- Test PNP Rééquilibrer le redémarrage d’échec du redémarrage de l’appareil
- Test PNP Cancel Stop Device
Comme avec le test de suppression, l’application de test tente d’ajouter un filtre supérieur à la pile d’appareils cible, puis de redémarrer la pile d’appareils à l’aide de SetupDiCallClassInstaller avec DIF_PROPERTYCHANGE. Si cette tentative échoue (autrement dit, si quelqu’un sur la pile d’appareils cible a échoué à l’IRP de suppression de requête), le test redémarre l’ordinateur pour tester le rééquilibrage.
Selon le test de rééquilibrage que vous choisissez, les événements suivants se produisent :
Test de l’appareil PNP Stop (Rééquilibrer) Ce test lance une procédure de rééquilibrage qui entraîne la IRP_MN_QUERY_STOP_DEVICE IRP PnP au pilote de périphérique.
Si un pilote de la pile échoue à cette IRP, la procédure de rééquilibrage est abandonnée. Notez que dans Windows Vista, le rééquilibrage à plusieurs niveaux est pris en charge. Si un rééquilibrage est démarré sur un nœud d’appareil non feuille, toutes les piles d’appareils présentes dans l’arborescence d’appareils avec ce nœud d’appareil comme racine passent également par un rééquilibrage. Et si l’une des piles d’appareils enfants échoue à l’arrêt de requête, toute la procédure de rééquilibrage est abandonnée. Ainsi, les pilotes ne doivent pas échouer l’arrêt de requête sans une véritable raison de le faire. Si cet échec se produit, le gestionnaire PnP envoie l’arrêt d’annulation (IRP_MN_CANCEL_STOP) à toutes les piles d’appareils qui avaient été envoyées à l’arrêt de requête.
Si toutes les piles d’appareils impliquées réussissent l’arrêt de requête, le test se poursuit avec le rééquilibrage et envoie les IRP_MN_QUERY_RESOURCE_REQUIREMENTS et IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRPS pour trouver les besoins en ressources des appareils.
Après ce point, deux chemins différents sont possibles selon que l’appareil cible consomme des ressources ou non :
Si l’appareil ne consomme aucune ressource, le gestionnaire PnP lui-même envoie un arrêt d’annulation (IRP_MN_CANCEL_STOP_DEVICE) en tant qu’optimisation.
Si l’appareil consomme réellement des ressources, la procédure de rééquilibrage est effectuée avec les IRP_MN_STOP_DEVICE et IRP_MN_START_DEVICE IRP.
Avec cette option, les ressources de l’appareil ne changent pas.
Test PNP Cancel Stop Device : ce test lance une procédure de rééquilibrage, mais le pilote de filtre échoue délibérément à l’IRP d’arrêt de requête. L’ordre des IRP ressemble à IRP_MN_QUERY_STOP_DEVICE (qui est échoué par le pilote de filtre lors de la sortie, entraînant une annulation de rééquilibrage) et IRP_MN_CANCEL_STOP_DEVICE.
Avec cette option, les ressources de l’appareil ne changent pas
PNP Rééquilibrer la demande De nouvelles ressources Test de l’appareil Ce test lance un rééquilibrage et manipule également les besoins en ressources de l’appareil pour maximiser les chances que de nouvelles ressources soient effectivement allouées à l’appareil. Cette option permet également à un appareil sans ressources de passer par la procédure de rééquilibrage complète :
Tout d’abord, le rééquilibrage simple est démarré, ce qui provoque les irPs suivants :
- IRP_MN_QUERY_STOP_DEVICE (en supposant que ce IRP est passé par tous les pilotes. Le test a déjà couvert le cas où cette IRP a échoué.)
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS. En réponse à cette IRP, lors de la montée en puissance, le pilote de filtre prend des mesures selon que l’appareil consomme des ressources ou non :
- Si l’appareil n’a aucune exigence de ressource, le filtre affecte une fausse ressource.
- Si l’appareil a des besoins en ressources, il tente de restructurer la liste des besoins en ressources de manière à maximiser la probabilité de modifier l’affectation actuelle. Par exemple, si un appareil a besoin de 2 octets de mémoire entre 00 et FF et qu’il est actuellement affecté à 3A-3B, modifiez de sorte que la nouvelle exigence de ressources (dans l’ordre de préférence) ressemble à 00-39 ou 3C-FF ou 3A-3B. De même, si la liste des besoins en ressources d’appareil a d’autres exigences, elle modifie leur ordre de sorte que l’autre exigence apparaît plus haut dans la liste.
À présent, l’appareil doit toujours effectuer la procédure de rééquilibrage.
IRP_MN_STOP_DEVICE
IRP_MN_START_DEVICE (nouvelles ressources allouées. Si de fausses exigences ont été créées, masquez les nouvelles ressources des pilotes réels.)
PNP Rééquilibrer échec redémarrage du test d’appareil Ce test initie un rééquilibrage, mais lorsque le pilote de filtre obtient le démarrage après le rééquilibrage, il échoue délibérément, ce qui provoque la suppression surprise IRP suivie de l’IRP de suppression.
Tout d’abord, il démarre la procédure de rééquilibrage et s’assure que le pilote obtient un arrêt et un démarrage en générant des besoins en ressources factices pour un appareil qui ne consomme pas de ressources.
- IRP_MN_QUERY_STOP_DEVICE (en supposant que ce IRP est passé par tous les pilotes. Le test a déjà couvert le cas où cette IRP a échoué.)
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS (Si l’exigence de ressource réelle est null, filtrez attribuer une fausse exigence de ressource, de sorte qu’il y a un arrêt et un début.)
- IRP_MN_STOP_DEVICE
- IRP_MN_START_DEVICE (Le filtre échoue à cette IRP lors de la montée. Cette action provoque la suppression surprise d’IRP.)
- IRP_MN_SURPRISE_REMOVAL
- IRP_MN_REMOVE
Une fois le test de rééquilibrage terminé, l’appareil est désinstallé et réinumé, ce qui supprime également le pilote de filtre de la pile.
Codes d’erreur de l’appareil
Si le test affiche un message d’erreur indiquant que le status de l’appareil n’est pas ok, vous pouvez en savoir plus sur l’appareil status via Gestionnaire de périphériques. Pour obtenir un résumé des différents codes d’erreur d’appareil, consultez Gestionnaire de périphériques Messages d’erreur.
Déboguer les échecs d’installation à l’aide des journaux de l’API d’installation
Les journaux d’API d’installation (setupapi.app.log et setupapi.dev.log) peuvent contenir des informations utiles pour déboguer les échecs d’installation du pilote enregistrés par ce test. Les journaux de l’API d’installation se trouvent sous le répertoire %windir%\inf\ sur le système de test.
Pour augmenter le niveau de détail et l’utilité potentielle de ces journaux d’activité, définissez la clé de Registre suivante sur 0x2000FFFF avant d’exécuter le test Réinstaller :
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\LogLevel
Rubriques connexes
Guide pratique pour tester un pilote au moment de l’exécution à l’aide de Visual Studio
Comment sélectionner et configurer les tests De base de l’appareil
Plug-ins d’E/S simples WDTF fournis
Comment tester un pilote au moment de l’exécution à partir d’une invite de commandes