Avlasta rutinmiljö

Operativsystemet tar bort en drivrutin när drivrutinen ersätts eller när alla enheter som drivrutinstjänsterna har tagits bort. PnP-chefen anropar en PnP-drivrutins avlastningsrutin om drivrutinen inte har fler enhetsobjekt när den har hanterat en IRP_MN_REMOVE_DEVICE begäran.

I början av avlastningssekvensen markerar I/O-hanteraren eller PnP-hanteraren drivrutinsobjektet och dess enhetsobjekt som "Avlastning väntar". När en drivrutin har markerats som "Avlastning väntar" kan inga fler drivrutiner kopplas till drivrutinen, och inga fler referenser kan göras till drivrutinens enhetsobjekt. Drivrutinen kan slutföra utestående IRP:er, men systemet kommer inte att skicka några nya IRP:er till drivrutinen.

I/O-hanteraren anropar en drivrutins unload-rutin när alla följande villkor är uppfyllda:

  • Inga referenser finns kvar till något av de enhetsobjekt som drivrutinen har skapat. Med andra ord kan inga filer som är associerade med den underliggande enheten vara öppna, och inga IRPs kan vara i väntan för något av drivrutinsens enhetsobjekt.

  • Inga andra drivrutiner är kopplade till den här drivrutinen.

  • Drivrutinen har anropat IoUnregisterPlugPlayNotification för att avregistrera alla PnP-meddelanden som den tidigare registrerades för.

Observera att avlastningsrutinen inte anropas om en drivrutins DriverEntry-rutin returnerar en felstatus. I det här fallet frigör I/O-hanteraren enkelt det minnesutrymme som drivrutinen tar upp.

Varken PnP-chefen eller I/O-chefen anropar Avlastningsrutiner vid systemavstängning. En drivrutin som måste utföra avstängningsbearbetning bör registrera en DispatchShutdown-rutin .