Delen via


PnP-tests (basisprincipes van apparaten)

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:

  1. Verifieert of er geen apparaten zijn die apparaatprobleemcodes in het systeem rapporteren.
  2. Test I/O op elk apparaat op het systeem met behulp van WDTF Simple I/O-invoegtoepassingen. Zie Geleverde WDTF Simple I/O-invoegtoepassingen voor meer informatie.
  3. Hiermee schakelt u elk apparaat op het systeem uit en schakelt u dit in met behulp van WDTF PnP-actieinterfaces. Zie IWDTFPNPAction2::D isableDevice en IWDTFPNPAction2::EnableDevice-methoden voor meer informatie.
  4. Verifieert of er geen apparaten zijn die apparaatprobleemcodes in het systeem rapporteren.
  5. Test I/O op elk apparaat op het systeem met behulp van WDTF Simple I/O-invoegtoepassingen. Zie Geleverde WDTF Simple I/O-invoegtoepassingen voor meer informatie.
  6. Herhaalt stap 3-5 meerdere keren.

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:

  1. 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.

  2. 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

  3. 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:

    1. 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.
    2. 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.)

  4. 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

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