Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Při odebírání zařízení musí ovladač funkce vrátit zpět všechny operace, které provedl pro přidání a spuštění zařízení. Tato diskuze obsahuje ovladače funkcí pro periferní zařízení a ovladače funkcí pro sběrná zařízení.
Ovladač funkce odebere zařízení pomocí procedury, jako je například následující v rutině DispatchPnP :
Jedná se o ovladač funkce pro sběrnicové zařízení?
Pokud ano, případně odstraňte všechny zbývající podřízené PDO pro zařízení na sběrnici.
Pokud ovladač sběrnice zpracoval předchozí IRP_MN_SURPRISE_REMOVAL žádost o podřízené zařízení, ale ovladač ještě nepřijal následnou IRP_MN_REMOVE_DEVICE žádost, ovladač sběrnice ponechá podřízenou PDO nedotčenou. Po zavření všech popisovačů podřízeného zařízení správce PnP později odešle příkaz k odebrání IRP (požadavek na vstup/výstup) pro podřízené zařízení a ovladač sběrnice odstraní podřízené PDO v tom okamžiku.
Pokud ovladač sběrnice zpracoval předešlou žádost IRP_MN_REMOVE_DEVICE pro zařízení a nepřišla žádná následná žádost IRP_MN_SURPRISE_REMOVAL, pak ovladač sběrnice odstraní podřízené PDO. V tomto případě správce PnP zajišťuje, že všechny ovladače funkcí a filtry byly odebrány z podřízeného zařízení (byly odstraněny FDO a filtry DO) předtím, než odešle IRP pro odstranění do nadřazeného zařízení sběrnice. Podřízené PDO může být stále přítomno, takže řidič sběrnice musí odstranit podřízené PDO před odebráním zařízení sběrnice.
Už zpracoval ovladač tohoto FDO předchozí žádost o IRP_MN_SURPRISE_REMOVAL?
Pokud ano, proveďte zbývající vyčištění a přeskočte ke kroku 8, IoCallDriver.
Ovladač obvykle udržuje příznak v rozšíření zařízení, který označuje, zda ovladač zpracoval žádost IRP_MN_SURPRISE_REMOVAL pro zařízení.
Pokud ovladač dříve povolil probuzení zařízení, zrušte IRP_MN_WAIT_WAKE žádost.
Ujistěte se, že je zařízení neaktivní.
Pokud zařízení ještě není v reakci na předchozí IRP_MN_QUERY_REMOVE_DEVICE neaktivní, ovladač musí zařízení označit jako nepřijímající nové požadavky a musí dokončit všechny požadavky zařazené do fronty tohoto ovladače. Ovladač musí zrušit všechny nevyřízené požadavky, které vyžadují přístup k zařízení.
Ovladač může použít rutiny IoXxxRemoveLockXxx k počítání nevyřízených vstupně-výstupních operací a k nastavení události označující, že zpracování odebrání může pokračovat.
Proveďte všechny operace vypnutí.
Každý ovladač zařízení provádí při příjmu IRP_MN_REMOVE_DEVICE požadavku operace vypnutí, pokud existuje. Vlastník zásady napájení zařízení, obvykle ovladač funkce, neodesílá samostatný požadavek IRP_MN_SET_POWER nastavit stav napájení zařízení na D3. Nadřazený řidič autobusu obvykle vypne slot a informuje správce napájení s PoSetPowerState, když řidič sběrnice dostane odstranit IRP. Další informace najdete v tématu Řízení spotřeby.
Zakažte všechna rozhraní zařízení voláním IoSetDeviceInterfaceState.
Uvolněte všechny hardwarové prostředky pro zařízení používané ovladačem.
Přesné operace závisí na zařízení a ovladači, ale může zahrnovat odpojení přerušení s IoDisconnectInterrupt, uvolnění rozsahů fyzických adres pomocí MmUnmapIoSpace a uvolnění vstupně-výstupních portů.
Předejte žádost IRP_MN_REMOVE_DEVICE na další ovladač.
Nastavte umístění zásobníku protokolu IRP pro další nižší ovladač pomocí ioSkipCurrentIrpStackLocation a předejte IRP dalšímu ovladači pomocí IoCallDriver.
Ovladač nemusí čekat, až podkladové ovladače dokončí operace odebrání, a teprve potom pokračovat v činnostech odebrání.
Odeberte objekt zařízení ze zásobníku zařízení pomocí IoDetachDevice.
Jako parametr TargetDevice zadejte ukazatel na další dolní objekt zařízení. Ovladač obdrží takový ukazatel z volání IoAttachDeviceToDeviceStack v rutině AddDevice ovladače.
Vyčistěte všechny přidělení specifické pro zařízení, paměť, události atd.
Uvolněte FDO pomocí funkce IoDeleteDevice.
Vraťte se z rutiny DispatchPnP, propagující stav návratu z IoCallDriver.
Funkční ovladač nespecifikuje rutinu IoCompletion pro odstranit IRP, ani IRP nedokončí. Odebrání přístupových bodů IRP dokončí nadřazený ovladač sběrnice.