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.
Rutina DispatchPnP ovladače podporuje funkcionalitu Plug and Play tím, že zpracovává I/O požadavky (IRP) pro kód IRP_MJ_PNP vstupně-výstupních operací. K funkčnímu kódu IRP_MJ_PNP jsou přidruženy několik menších vstupně-výstupních funkčních kódů (viz Dílčí IRP Plug and Play), z nichž některé musí všechny ovladače zpracovávat, zatímco některé lze zpracovávat volitelně. Správce PnP používá tyto menší kódy funkcí k nasměrování ovladačů na spouštění, zastavování a odebírání zařízení a dotazování ovladačů na jejich zařízení.
Všechny ovladače zařízení musí mít možnost zpracovat PnP IRP pro zařízení, s výjimkou několika případů, kdy může ovladač funkce nebo filtru selhat IRP.
Rutina DispatchPnP každého ovladače musí dodržovat tato pravidla:
Funkční nebo filtrační ovladač musí předat PnP IRP dalšímu ovladači v hardwarovém zásobníku zařízení, ledaže by tento ovladač zpracoval IRP a narazil na selhání, například kvůli nedostatku prostředků.
Pokud některý z ovladačů nenarazí na chybu, musí mít všechny ovladače pro zařízení možnost zpracovat PnP IRP. Správce PnP odesílá IRP na nejvyšší ovladač ve stohu zařízení. Ovladače funkce a filtru předávají IRP dalšímu ovladači a nadřazený ovladač sběrnice dokončí IRP. Další informace najdete v tématu Předávání PnP IRPs v zásobníku zařízení .
Ovladač může odmítnout IRP, pokud se pokusí ho zpracovat a dojde k chybě (například nedostatkem zdrojů). Pokud ovladač obdrží IRP s kódem, který není schopen zpracovat, nesmí IRP odmítnout. Musí předat takový IRP dalšímu ovladači bez změny jeho stavu.
Ovladač musí zpracovávat určité PnP IRP a může se volitelně zabývat jinými.
Každý ovladač PnP je nutný ke zpracování určitých irps, jako jsou IRP_MN_REMOVE_DEVICE, a volitelně může zpracovat jiné. Podívejte se na Plug and Play Minor IRPs pro informace o tom, které IRP jsou vyžadovány a volitelné pro každý typ ovladače (funkční ovladače, filtrační ovladače a sběrnicové ovladače).
Ovladač může neúspěšně zpracovat požadovaný IRP PnP s odpovídajícím stavem chyby, ale ovladač nesmí vrátit STATUS_NOT_SUPPORTED pro takový IRP.
Pokud ovladač zvládá IRP PnP úspěšně, ovladač nastaví stav protokolu IRP na úspěch. Nezávisí na jiném ovladači v sestavě, aby nastavil stav.
Ovladač nastaví Irp-IoStatus.Status> na STATUS_SUCCESS, aby informoval správce PnP, že ovladač úspěšně zpracoval IRP. U některých IRP operací může být ovladač nesouvisející se sběrnicí schopný spoléhat na svůj mateřský ovladač sběrnice, aby nastavil stav na úspěch. Toto je ale riziková praxe. Kvůli konzistenci a robustnosti musí ovladač nastavit stav protokolu IRP na úspěch pro každý PnP IRP, který úspěšně zpracovává.
Pokud ovladač selže s IRP, ovladač dokončí IRP se stavem chyby a nepředá IRP do dalšího ovladače.
Chcete-li selhat IRP jako IRP_MN_QUERY_STOP_DEVICE, ovladač nastaví Irp->IoStatus.Status na STATUS_UNSUCCESSFUL. Mezi další hodnoty stavu chyb pro jiné IRP patří STATUS_INSUFFICIENT_RESOURCES a STATUS_INVALID_DEVICE_STATE.
Ovladače nenastavují STATUS_NOT_SUPPORTED pro IRPs, které zpracovávají. Toto je počáteční stav nastavený správcem PnP. Pokud je IRP dokončen s tímto stavem, znamená to, že žádný ovladač v zásobníku nevyřídil IRP; všechny ovladače jej prostě předaly dalšímu ovladači.
Ovladač musí zpracovávat protokol IRP PnP v jeho rutině odesílání (na cestě IRP do zásobníku zařízení), v rutině IoCompletion (na cestě IRP zpět do zásobníku zařízení) nebo obojí, jak je uvedeno na referenční stránce pro IRP.
Některé PnP IRPs, jako je například IRP_MN_REMOVE_DEVICE, musí nejprve zpracovat ovladač v horní části zásobníku zařízení a poté každým dalším nižším ovladačem. Ostatní, například IRP_MN_START_DEVICE, musí nejprve zpracovat nadřazený řidič autobusu. Ostatní, například IRP_MN_QUERY_CAPABILITIES, se dají zvládnout jak při sestupování, tak při návratu v hierarchii zařízení. Více informací o pravidlech, která platí pro jednotlivé IRP systému Plug and Play, naleznete v části Plug and Play Minor IRPs. Informace o zpracování PnP, které musí nejprve zpracovat nadřazený ovladač sběrnice, najdete v tématu Pozpožďování zpracování protokolu IRP až do dokončení nižších ovladačů .
Ovladač musí přidat informace do IRP při sestupu po zásobníku zařízení a upravit nebo odebrat informace při návratu IRP zpět nahoru.
Při vracení informací v reakci na PnP dotaz IRP musí ovladač dodržovat tuto konvenci, aby vrstvené ovladače zařízení mohly uspořádaně předávat informace.
Pokud to není explicitně zdokumentováno, ovladač nesmí záviset na tom, že PnP IRPs jsou odesílány v konkrétním pořadí.
Když ovladač odešle IRP PnP, musí odeslat IRP na nejvyšší ovladač v zásobníku zařízení.
Většina PnP IRP je odesílána správcem PnP, ale některé můžou odesílat ovladače (například IRP_MN_QUERY_INTERFACE). Ovladač musí odeslat PnP IRP k ovladači umístěnému v horní části zásobníku zařízení. Zavolejte IoGetAttachedDeviceReference a získejte ukazatel na objekt zařízení pro ovladač v horní části zásobníku zařízení.