Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De Device Fundamentals PnP-tests dwingen een stuurprogramma om bijna alle PnP IRP's af te handelen; er zijn echter drie gebieden die specifiek benadrukt worden: verwijdering, herbalanceren en onverwachte verwijdering. De PnP-test biedt een mechanisme om elk van deze afzonderlijk te testen of om ze allemaal samen te testen (dat wil gezegd, als stresstest). Deze PnP-test wordt uitgevoerd met behulp van een combinatie van API-aanroepen in de gebruikersmodus (via de testtoepassing) en API-aanroepen in de kernelmodus (via een stuurprogramma voor het bovenste filter).
PNP-tests
De Plug and Play-tests (PnP) voeren verschillende PnP-gerelateerde codepaden uit in de onderdelen van het stuurprogramma en de gebruikersmodus. De PnP-tests moeten worden uitgevoerd met Driver Verifier ingeschakeld op de testcomputer. Voor informatie over het inschakelen van Driver Verifier, zie Eigenschappen van Driver Verifier voor stuurprogrammaprojecten.
| Testen | Beschrijving |
|---|---|
Ondersteuning voor Enhanced Device Testing (EDT) uitschakelen |
Met deze test wordt het testfilterstuurprogramma (msdmfilt.sys) verwijderd als een bovenfilter op apparaten die zijn opgegeven met behulp van de DQ-parameter. Dit testfilter wordt geïnstalleerd als onderdeel van het uitvoeren van tests in deze testcategorie Parameters: - zie Testparameters voor apparaatbasisprincipes DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO IOType |
PNP (uitschakelen en inschakelen) opnieuw opstarten met IO vóór en na |
Deze test voert het in- en uitschakelen van PnP en de I/O op apparaten uit, na een systeem herstart. Testbinaire: Devfund_PNP_DisableEnable_Reboot_With_IO_BeforeAndAfter.wsc Testmethode: PNP_DisableEnable_Reboot_With_IO_Before_And_After Parameters: - zie Testparameters voor apparaatbasisprincipes DQ IOPeriod |
PNP (in- en uitschakelen) met I/O ervoor en erna |
Deze test voert I/O-operaties uit en schakelt basis PnP-functionaliteit uit/in op apparaten. Deze test doet het volgende:
Binair testen: Devfund_PNP_DisableEnable_With_IO_BeforeAndAfter.wsc Testmethode: PNP_DisableEnable_With_IO_Before_And_After Parameters: - zie Testparameters voor apparaatbasisprincipes DQ IOPeriod |
PNP: Apparaattest verwijderen annuleren |
Deze test maakt gebruik van het EDT-filterstuurprogramma om IRP_MN_CANCEL_REMOVE_DEVICE te verzenden naar doelapparaatsstapels. Zie Over de verwijderingstests voor apparaten voor meer informatie. Binair testen: Devfund_PnPDTest.dll Testmethode: PNPCancelRemoveDevice Parameters: - zie Testparameters voor apparaatbasisprincipes DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP Stop Device Test annuleren |
Deze test maakt gebruik van het EDT-filterstuurprogramma om IRP_MN_CANCEL_STOP_DEVICE te verzenden naar de doelapparaatstacks. Zie Over de herbalance-tests voor meer informatie. Binair testen: Devfund_PnPDTest.dll Testmethode: PNPCancelStopDevice Parameters: - zie Testparameters voor apparaatbasisprincipes DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP DIF Apparaattest verwijderen |
Deze test maakt gebruik van de SetupDi-API om een DIF_REMOVE aanvraag te verzenden voor de installatieprogramma's om het apparaat te verwijderen. Binair testen: Devfund_PnPDTest.dll Testmethode: PNPDIFRemoveAndRescanParentDevice Parameters: - zie Testparameters voor apparaatbasisprincipes DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP-test apparaat uitschakelen en inschakelen |
Met deze test worden de doelapparaten uitgeschakeld en ingeschakeld. Binair testen: Devfund_PnPDTest.dll Testmethode: PNPDisableAndEnableDevice Parameters: - zie Testparameters voor apparaatbasisprincipes DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO IOType |
PNP Herverdelingsfout Test Apparaat Opnieuw Opstarten |
Deze test maakt gebruik van het EDT-filterstuurprogramma om te proberen IRP_MN_STOP_DEVICE te verzenden naar doelapparaat-stacks. Het EDT-filterstuurprogramma faalt vervolgens IRP_MN_START_DEVICE-aanvragen (die volgen op IRP_MN_STOP_DEVICE-aanvragen) om het onverwachte verwijderen van doelapparaten te activeren. Zie Over de herbalance-tests voor meer informatie. Binair testen: Devfund_PnPDTest.dll Testmethode: PNPTryStopDeviceAndFailRestart Parameters: - zie Testparameters voor apparaatbasisprincipes DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP: Herverdeling verzoek nieuwe hulpbronnenapparaat-test |
Deze test maakt gebruik van het EDT-filterstuurprogramma om te proberen IRP_MN_STOP_DEVICE naar de doelapparaatstacks te verzenden. Het bewerkt ook de resourcevereisten van de apparaten om de kans te maximaliseren dat nieuwe resources worden toegewezen aan apparaten. Zie Over de herbalance-tests voor meer informatie. Binair testen: Devfund_PnPDTest.dll Testmethode: PNPTryStopDeviceRequestNewResourcesAndRestartDevice Parameters: - zie Testparameters voor apparaatbasisprincipes DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP Apparaatverwijderingstest |
Deze test zorgt ervoor dat IRP_MN_QUERY_REMOVE_DEVICE en IRP_MN_REMOVE_DEVICE worden verzonden naar doelapparaatstacks. Zie Over de verwijderingstests voor apparaten voor meer informatie. Binair testen: Devfund_PnPDTest.dll Testmethode: PNPRemoveAndRestartDevice Parameters: - zie Testparameters voor apparaatbasisprincipes DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP Stop -apparaattest (opnieuw verdelen) |
Deze test maakt gebruik van het EDT-filterstuurprogramma om te proberen IRP_MN_STOP_DEVICE naar de doelapparaatstacks te verzenden. Zie Over de herbalance-tests voor meer informatie. Binair testen: Devfund_PnPDTest.dll Testmethode: PNPTryStopAndRestartDevice Parameters: - zie Testparameters voor apparaatbasisprincipes DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP Verrassingsverwijdering van apparaat test |
Deze test maakt gebruik van het EDT-filterstuurprogramma om IRP_MN_SURPRISE_REMOVAL naar doelapparaatstapels te verzenden. Zie Over de verrassingsverwijderingstest voor meer informatie. Binair testen: Devfund_PnPDTest.dll Testmethode: PNPSurpriseRemoveAndRestartDevice Parameters: - zie Testparameters voor apparaatbasisprincipes DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Over de apparaatverwijderingstests
- PNP Test voor het Verwijderen van Apparaten
- PNP: Apparaattest verwijderen annuleren
De test voor apparaatverwijdering omvat IRP_MN_QUERY_REMOVE_DEVICE, IRP_MN_CANCEL_REMOVE_DEVICE en IRP_MN_REMOVE_DEVICE.
Tijdens de test wordt geprobeerd het stuurprogramma voor het bovenste filter op de doelapparaatstack te installeren. Deze poging resulteert in een IRP voor het verwijderen van query's.
Als deze query-verwijder-IRP mislukt, start de test de computer opnieuw op om het filterstuurprogramma op de stack van het apparaat te plaatsen. Als de verwijderaanvraag niet vetoed is, wordt de apparaatstack verwijderd en opnieuw opgestart met het filterstuurprogramma op de apparaatstack.
De test zorgt ervoor dat een IRP voor het verwijderen van query's wordt verzonden naar de apparaatstack met behulp van setup-API's. Het filterstuurprogramma mislukt deze verwijderaanvraag, zodat er een IRP voor annuleren en verwijderen wordt verzonden. Het filterstuurprogramma bevestigt dat het annuleren van de verwijdering is geslaagd.
Vervolgens roept de testtoepassing het juiste klasse-installatieprogramma en alle geregistreerde co-installatieprogramma's aan om het apparaat uit te schakelen of te verwijderen of opnieuw te inventariseren (hiermee worden de klasse- en co-installers-verwerking van DIF_PROPERTYCHANGE getest met DICS_DISABLE, DICS_ENABLE en DICS_PROPCHANGE). Wanneer IRP_MN_REMOVE_DEVICE wordt ontvangen, zal het filterstuurprogramma bevestigen dat de lagere stuurprogramma's het hebben voltooid.
Elk van deze stappen omvat een voorlopige verwijderaanvraag. Als deze aanvraag vetoed is, wordt het apparaat niet verwijderd. U kunt ervoor kiezen om een verzoek om te verwijderen te vetoën indien van toepassing, zoals tijdens het streamen van video op een USB-camera of als het doelapparaat zich in het opstart- of pagineerpad bevindt. Vergeet niet dat het gewoon mislukken van alle verwijderaanvragen over het algemeen geen goede gewoonte is. Als u niet alle verwijderaanvragen uitvoert, wordt niet gegarandeerd dat het stuurprogramma nooit een verwijdering ontvangt omdat er na een verrassingsverwijdering nog steeds een verwijder-IRP wordt uitgegeven, of als iemand in de apparaatstack een start-IRP mislukt.
Over de verrassingsverwijderingstest
- PNP-test voor onverwachte verwijdering van apparaat
De Surprise Removal test omvat IRP_MN_SURPRISE_REMOVAL gevolgd door IRP_MN_REMOVE_DEVICE.
Net als bij de vorige tests probeert de testtoepassing een bovenfilter toe te voegen aan de doelapparaatstack en vervolgens de stack opnieuw op te starten. Als deze poging niet lukt, start de test de computer opnieuw op.
Wanneer het door de testtoepassing wordt geactiveerd, zorgt het filterstuurprogramma ervoor dat het systeem een IRP_MN_SURPRISE_REMOVAL naar de apparaatstack verzendt, gevolgd door een IRP_MN_REMOVE_DEVICE. Het filterstuurprogramma bevestigt dat beide IRP's zijn voltooid door lagere stuurprogramma's.
Nadat de test voor het verwijderen van verrassingen is voltooid, wordt het apparaat verwijderd en opnieuw geïnventariseerd, en wordt ook het filterstuurprogramma uit de stack verwijderd.
Over de herbalancetests
- PNP Stop-apparaat herindelingstest
- PNP-verzoek om herverdeling van nieuwe resources-apparaattest
- PNP-herverdeling mislukt appraat opnieuw opstarten test.
- PNP-test 'Stopapparaat annuleren'
Net als bij de verwijderingstest probeert de testtoepassing een bovenfilter toe te voegen aan de doelapparaatstack en vervolgens de apparaatstack opnieuw op te starten met behulp van SetupDiCallClassInstaller met DIF_PROPERTYCHANGE. Als deze poging niet lukt (als iemand op de doelapparaatstack de query-verwijder IRP heeft mislukt), start de test de computer opnieuw op om te testen op herverdeling.
Afhankelijk van welke test u kiest, vinden de volgende gebeurtenissen plaats:
PNP Stop (Herverdelings)apparaat test Met deze test wordt een herverdelingsprocedure gestart die resulteert in de IRP_MN_QUERY_STOP_DEVICE PnP IRP voor het apparaatstuurprogramma.
Als een stuurprogramma in de stack mislukt, wordt de herbalanceerprocedure verworpen. Houd er rekening mee dat er in Windows Vista ondersteuning is voor herverdeling op meerdere niveaus. Als een herbalancering wordt gestart op een niet-leaf-apparaatknooppunt, worden alle apparaatstacks die aanwezig zijn in de apparaatstructuur met dat apparaatknooppunt als de wortel, ook herverdeeld. Als een van de onderliggende apparaatstapels de 'query stop' faalt, wordt de hele herbalance-procedure afgebroken. Besturingsprogramma's mogen dus geen query stoppen zonder daarvoor een geldige reden. Als deze fout optreedt, verzendt de PnP-manager de annulering van stop (IRP_MN_CANCEL_STOP) naar alle apparaatstacks die zijn verzonden stop aanvragen.
Als alle betrokken apparaatstacks de query stop passeren, gaat de test verder met het herbalanceren en verzendt het de IRP_MN_QUERY_RESOURCE_REQUIREMENTS en IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRPS om de resourcevereisten van de apparaten te bepalen.
Na dit punt zijn twee verschillende paden mogelijk, afhankelijk van of het doelapparaat resources verbruikt of niet:
Als het apparaat geen resources verbruikt, verzendt de PnP-manager zelf een annuleringsstop (IRP_MN_CANCEL_STOP_DEVICE) als optimalisatie.
Als het apparaat daadwerkelijk resources verbruikt, wordt de herbalanceprocedure voltooid met de IRP_MN_STOP_DEVICE en IRP_MN_START_DEVICE IRPs.
Met deze optie worden de resources van het apparaat niet gewijzigd.
PNP Cancel Stop Device Test: Deze test start een herbalanceerprocedure, maar het filterstuurprogramma laat opzettelijk de query stop-IRP mislukken. De volgorde van IRP's ziet eruit als IRP_MN_QUERY_STOP_DEVICE (die door het filterstuurprogramma faalt tijdens het opstarten, waardoor een herverdeling wordt geannuleerd) en IRP_MN_CANCEL_STOP_DEVICE.
Met deze optie worden de resources van het apparaat niet gewijzigd
PNP-verzoek om opnieuw in evenwicht te brengen: testen met nieuwe resources voor het apparaat Met deze test wordt een herbalancering gestart en wordt ook de resourcevereiste van het apparaat bewerkt om de kans te maximaliseren dat daadwerkelijk nieuwe resources aan het apparaat worden toegewezen. Met deze optie kan een apparaat zonder resources ook daadwerkelijk de volledige herbalance-procedure doorlopen:
Eerst wordt de eenvoudige herbalancering gestart, waardoor de volgende IRPs worden veroorzaakt:
- IRP_MN_QUERY_STOP_DEVICE (ervan uitgaand dat deze IRP wordt doorgegeven door alle stuurprogramma's. De test heeft al het geval behandeld waarin deze IRP is mislukt.)
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS. Als reactie op deze IRP voert het filterstuurprogramma actie uit op basis van het feit of het apparaat bronnen verbruikt of niet.
- Als het apparaat geen resourcevereiste heeft, wijst de filter een fictieve resource toe.
- Als het apparaat een resourcevereiste heeft, probeert het de lijst met resourcevereisten zodanig te herstructureren dat de kans op het wijzigen van de huidige toewijzing wordt gemaximaliseerd. Als een apparaat bijvoorbeeld 2 bytes geheugen nodig heeft tussen 00 en FF en momenteel 3A-3B is toegewezen, wijzigt u deze zodat de nieuwe resourcevereiste (in volgorde van voorkeur) eruitziet als 00-39 of 3C-FF of 3A-3B. Als de lijst met apparaatresourcevereisten alternatieve vereisten heeft, wordt de volgorde gewijzigd, zodat de alternatieve vereiste eerder in de lijst voorkomt.
Nu moet het apparaat altijd de herbalanceprocedure voltooien.
IRP_MN_STOP_DEVICE
IRP_MN_START_DEVICE (De nieuw toegewezen resources. Als er nepvereisten zijn gemaakt, moet u de nieuwe resources maskeren van de werkelijke stuurprogramma's.)
PNP Herverdelingsfalen herstart apparaattest Deze test start een herverdeling, maar wanneer het filterstuurprogramma de start krijgt na de herverdeling, laat het deze opzettelijk mislukken, waardoor de verrassingsverwijderings-IRP wordt veroorzaakt, gevolgd door verwijderings-IRP.
Eerst wordt de herbalanceringsprocedure gestart en wordt ervoor gezorgd dat het stuurprogramma stopt en opnieuw start door nep-resourcevereisten te genereren voor een apparaat dat geen resources verbruikt.
- IRP_MN_QUERY_STOP_DEVICE (ervan uitgaande dat deze IRP wordt doorgegeven door alle stuurprogramma's. De test heeft al betrekking op het geval waarin deze IRP is mislukt.)
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS (Als de werkelijke resourcevereiste null is, voegt u een fictieve resourcevereiste toe, zodat er een stop en een begin is.)
- IRP_MN_STOP_DEVICE
- IRP_MN_START_DEVICE (Het filter laat deze IRP mislukken tijdens het opwaarts verwerken. Deze actie zorgt voor de verrassende verwijdering IRP.)
- IRP_MN_SURPRISE_REMOVAL
- IRP_MN_REMOVE
Nadat de test voor opnieuw verdelen is voltooid, wordt het apparaat verwijderd en opnieuw geïnventariseerd, en wordt ook het filterstuurprogramma uit de stack verwijderd.
Foutcodes voor apparaat
Als de test een foutbericht geeft waarin wordt aangegeven dat de apparaatstatus niet in orde is, kunt u meer informatie vinden over de apparaatstatus via Apparaatbeheer. Zie Apparaatbeheerfoutberichten voor een overzicht van de verschillende apparaatfoutcodes.
Installatiefouten debuggen met behulp van de Setup-API-logboeken
De installatie-API-logboeken (setupapi.app.log en setupapi.dev.log) kunnen nuttige informatie bevatten voor het opsporen van fouten in de installatie van stuurprogramma's die door deze test zijn vastgelegd. De installatie-API-logboeken vindt u onder %windir%map \inf\ op het testsysteem.
Als u de uitgebreidheid en mogelijke bruikbaarheid van deze logboeken wilt vergroten, stelt u de volgende registersleutel in op 0x2000FFFF voordat u de test opnieuw installeren uitvoert:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\LogLevel
Verwante onderwerpen
Hoe een stuurprogramma te testen tijdens uitvoering met behulp van Visual Studio
Hoe u de basisfunctietests van apparaten selecteert en configureert
Basisprincipestests voor apparaten
WDTF Simple I/O-invoegtoepassingen verstrekt
Een stuurprogramma tijdens runtime testen vanaf een opdrachtprompt