Delen via


Begrijpen wanneer verwijder-IRP's worden uitgegeven

In de volgende afbeelding ziet u de typische reeks IRP's die betrokken zijn bij het verwijderen van de stuurprogramma's voor een apparaat.

diagram met typische verwijder-irp-overgangen.

De volgende opmerkingen komen overeen met de cirkelnummers in de vorige afbeelding:

  1. Query verwijderen

    De PnP-manager geeft een IRP_MN_QUERY_REMOVE_DEVICE uit om te vragen of een apparaat kan worden verwijderd zonder de machine te verstoren. Deze IRP wordt ook verzonden wanneer een gebruiker verzoekt om stuurprogramma's voor het apparaat bij te werken en (op Windows 2000 en hoger) wanneer Apparaatbeheer het apparaat uitschakelt. (In Windows 98/Me verzendt de PnP-manager stop-IR's in deze situatie. Zie Een apparaat stoppen voor meer informatie.)

    Als alle stuurprogramma's in de apparaatstack STATUS_SUCCESS retourneren, hebben de stuurprogramma's het apparaat in de status 'verwijderen in behandeling' gebracht. In deze status mogen de stuurprogramma's geen bewerkingen starten waardoor het apparaat niet kan worden verwijderd.

    In dit 'schone' verwijderingsscenario verzendt de PnP-manager een IRP voor het verwijderen van query's voordat er een verwijder-IRP wordt verzonden. Zie stap 5 voor een beschrijving van de verwijdering van 'verrassing'.

    Hoewel het niet wordt weergegeven in het bovenstaande diagram, ontvangt een buschauffeur mogelijk een IRP_MN_QUERY_REMOVE_DEVICE voor een apparaat dat niet is gestart. Dit kan gebeuren als een gebruiker vraagt om een apparaat dat fysiek aanwezig is op de computer dynamisch te verwijderen, maar is uitgeschakeld.

  2. Verwijderen na geslaagde query

    De PnP-manager geeft een IRP_MN_REMOVE_DEVICE uit om de stuurprogramma's voor een apparaat te verwijderen.

    Bestuurders moeten dit verzoek inwilligen. De drivers voor het apparaat voeren de nodige opschoonwerkzaamheden uit, koppelen zich los van de apparaatstapel en verwijderen de FDO en eventuele filter-DO's. Het bovenliggende busstuurprogramma behoudt de PDO totdat de gebruiker het apparaat fysiek van de machine verwijdert.

    Houd er rekening mee dat stuurprogramma's mogelijk een IRP_MN_STOP_DEVICE ontvangen voordat een IRP wordt verwijderd, maar dit is niet vereist. In Windows 2000 en hoger wordt IRP_MN_STOP_DEVICE alleen gebruikt om een apparaat te onderbreken voor het opnieuw verdelen van resources; het is geen stap naar verwijdering. Als een gebruiker de apparaathardware verwijdert terwijl het apparaat wordt gestopt, verzendt de PnP-manager op een bepaald moment na de stop-IRP een verwijder-IRP, maar is een stop geen vereiste voor een verwijder.

  3. Het apparaat opnieuw inventariseren

    Als het apparaat opnieuw wordt geïnventariseerd nadat stuurprogramma's hun apparaatobjecten hebben verwijderd, roept de PnP-manager de AddDevice-routines van de stuurprogramma's aan en geeft een IRP_MN_START_DEVICE om het apparaat opnieuw in te stellen. (Zie ook de apparaatstatussen vanuit het PnP-perspectief figuur.)

  4. De verwijdering van een query annuleren

    De PnP-manager geeft een IRP_MN_CANCEL_REMOVE_DEVICE uit om een aanvraag voor het verwijderen van query's te annuleren.

    Als reactie op een IRP_MN_CANCEL_REMOVE_DEVICE, retourneren de stuurprogramma's het apparaat in de status Gestart.

  5. Verrassing verwijderen (Windows 2000 en latere versies van Windows)

    Als een gebruiker in Windows 2000 en hoger een apparaat loskoppelt van de computer zonder het programma Hardware loskoppelen of uitwerpen, verzendt de PnP-manager een IRP_MN_SURPRISE_REMOVAL IRP.

    Dit geval wordt 'verrassing' verwijdering genoemd omdat de chauffeurs geen voorafgaande waarschuwing ontvangen.

    Als reactie op een IRP_MN_SURPRISE_REMOVAL IRP laten de stuurprogramma's voor het apparaat alle openstaande I/O mislukken en geven de hardwarebronnen die door het apparaat worden gebruikt vrij. De stuurprogramma's moeten ervoor zorgen dat er geen onderdelen proberen toegang te krijgen tot het apparaat omdat het niet meer aanwezig is.

    Alle stuurprogramma's moeten een IRP_MN_SURPRISE_REMOVAL IRP verwerken en de status instellen op STATUS_SUCCESS.

    Een IRP_MN_SURPRISE_REMOVAL kan niet worden geannuleerd.

  6. Verwijderen na onverwachte verwijdering (Windows 2000 en latere versies van Windows)

    Wanneer alle geopende ingangen naar het apparaat worden gesloten, stuurt de PnP-manager een IRP_MN_REMOVE_DEVICE aanvraag naar de stuurprogramma's voor het apparaat. Elk stuurprogramma wordt losgekoppeld van de apparaatstack en verwijdert het apparaatobject.

  7. Verrassing verwijderen (Windows 98/Me)

    In Windows 98/Me ontvangt een stuurprogramma geen IRP_MN_SURPRISE_REMOVAL wanneer een apparaat zonder waarschuwing wordt verwijderd. De PnP-manager verzendt alleen een IRP_MN_REMOVE_DEVICE. WDM-stuurprogramma's moeten code hebben om zowel een IRP_MN_SURPRISE_REMOVAL te verwerken als gevolgd door een IRP_MN_REMOVE_DEVICE (het gedrag van Windows 2000 en hoger voor het verwijderen van verrassingen) en een IRP_MN_REMOVE_DEVICE zonder een voorafgaande verrassing verwijderen IRP (het gedrag van Windows 98/Me).

  8. Verwijderen na een mislukte start (Windows 2000 en hoger)

    Als een van de stuurprogramma's voor een apparaat een IRP_MN_START_DEVICE mislukt, stuurt de PnP-manager een IRP_MN_REMOVE_DEVICE aanvraag naar de apparaatstack. Een dergelijke "verwijder-IRP" zorgt ervoor dat alle stuurprogramma's voor het apparaat worden geïnformeerd dat het apparaat niet succesvol is gestart. Als reactie op de IRP_MN_REMOVE_DEVICE IRP, maken de stuurprogramma's voor het apparaat hun startbewerkingen ongedaan (als ze de IRP hebben voltooid) en maken ze hun AddDevice-bewerkingen ongedaan. De PnP-manager markeert een dergelijk apparaat als 'Mislukt starten'.

    Dit gedrag is alleen van toepassing op Windows 2000- en hogerplatforms. In Windows 98/Me verzendt de PnP-manager een IRP_MN_STOP_DEVICE als reactie op een mislukte start.

Een driver voor een PnP-apparaat kan in meer situaties een IRP_MN_SURPRISE_REMOVAL ontvangen dan in de afbeelding waarin typische remove IRP-overgangen worden geïllustreerd. Een gebruiker kan bijvoorbeeld een pc-kaart in de computer invoegen en deze vervolgens verwijderen voordat het apparaat wordt gestart. In dat geval geeft de PnP-manager een IRP voor onverwachte verwijdering uit nadat de AddDevice-routines van de stuurprogramma's zijn aangeroepen, maar voordat de IRP_MN_START_DEVICE aanvraag wordt uitgegeven. Een stuurprogramma voor een PnP-apparaat moet op elk gewenst moment worden voorbereid voor het afhandelen van VERWIJDER-IR's nadat de AddDevice-routine van het stuurprogramma is aangeroepen.