Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A PnP-kezelő elküldi ezt a kérést az eszközök közötti bizonyos kapcsolatok meghatározásához. A következő típusú illesztőprogramok kezelik ezt a kérést:
A buszvezetőknek BusRelations adapterre vagy vezérlőre (bus FDO) vonatkozó kéréseket kell kezelniük. A szűrőillesztők BusRelations kéréseket kezelhetnek.
A buszvezetőknek kezelniük kell TargetDeviceRelation gyermekeszközeik (gyermek PDO-k) kéréseit.
A függvény- és szűrőillesztők és PowerRelations kéréseket kezelhetnek.
A buszvezetők kezelhetik EjectionRelations gyermekeszközeikre (gyermek PDO-k) vonatkozó kéréseket.
Érték
0x07
Fő kód
Küldéskor
A PnP-kezelő elküldi ezt az IRP-t, hogy információkat gyűjtsön a megadott eszközzel kapcsolatban lévő eszközökről.
A PnP-kezelő lekérdezi az eszköz BusRelations (gyermekeszközök) értékét az eszköz számbavételekor, máskor pedig az eszköz aktív állapotában, például amikor egy illesztőprogram meghívja a IoInvalidateDeviceRelations rutint, amely azt jelzi, hogy egy gyermekeszköz megérkezett vagy elindult.
A PnP-kezelő lekérdezi az eszköz RemoveRelations, mielőtt eltávolítja az eszköz illesztőprogramjait. A PnP-kezelő lekérdezi RemovalRelations és EjectionRelations, mielőtt kibocsát egy eszközt.
A PnP-kezelő lekérdezi az eszköz TargetDeviceRelation, amikor egy illesztőprogram vagy felhasználói módú alkalmazás regisztrál egy EventCategoryTargetDeviceChange az eszközön. A PnP-kezelő lekérdezi az adott fájlobjektumhoz társított eszközt. IRP_MN_QUERY_DEVICE_RELATIONS az egyetlen PnP IRP, amely érvényes fájlobjektum-paraméterrel rendelkezik. Az illesztőprogramok lekérdezhetik TargetDeviceRelationeszközveremét. Az illesztőprogramnak nem kell fájlobjektumot megadnia a TargetDeviceRelation lekérdezés elküldésekor.
A PnP-kezelő lekérdezi az eszköz PowerRelations, amikor az eszköz illesztőprogramja meghívja IoInvalidateDeviceRelations annak jelzésére, hogy megváltozott azoknak az eszközöknek az halmaza, amelyekkel az eszköz implicit energiagazdálkodási kapcsolatban áll. PowerRelations kérések a Windows 7-től kezdve támogatottak.
A BusRelations, RemovalRelations, EjectionRelationsés PowerRelations kérések esetében a PnP-kezelő IRP_MN_QUERY_DEVICE_RELATIONS küld irQL = PASSIVE_LEVEL a rendszerszál kontextusában.
A TargetDeviceRelation kérések esetében a PnP-kezelő ezt az IRP-t irQL = PASSIVE_LEVEL egy tetszőleges szálkörnyezetben küldi el.
Bemeneti paraméterek
A Parameters.QueryDeviceRelations.TypeIO_STACK_LOCATION struktúra tagja határozza meg a lekérdezett kapcsolatok típusát. Lehetséges értékek: BusRelations, EjectionRelations, RemovalRelations, TargetDeviceRelationés PowerRelations.
A FileObject jelenlegi IO_STACK_LOCATION struktúrájának tagja csak akkor mutat érvényes fájlobjektumra, ha Parameters.QueryDeviceRelations.TypeTargetDeviceRelation.
Kimeneti paraméterek
Az I/O állapotblokkban van visszaadva.
I/O állapotblokk
Az illesztőprogramok Irp->IoStatus.Status STATUS_SUCCESS vagy hibaállapotra, például STATUS_INSUFFICIENT_RESOURCES.
Sikeresség esetén az illesztő az Irp- >IoStatus.Information egy PDEVICE_RELATIONS mutatóra állítja, amely a kért kapcsolati adatokra mutat. A DEVICE_RELATIONS szerkezet a következőképpen van definiálva:
typedef struct _DEVICE_RELATIONS {
ULONG Count;
PDEVICE_OBJECT Objects[1]; // variable length
} DEVICE_RELATIONS, *PDEVICE_RELATIONS;
Művelet
Ha egy illesztőprogram a IRP_MN_QUERY_DEVICE_RELATIONSválaszul ad vissza kapcsolatokat, az illesztőprogram egy DEVICE_RELATIONS struktúrát foglal le a lapozott memóriából, amely számmal és a megfelelő számú eszközobjektum-mutatóval rendelkezik. A PnP-kezelő felszabadítja a struktúrát, ha már nincs rá szükség. Ha egy illesztőprogram egy másik illesztőprogram által lefoglalt DEVICE_RELATIONS struktúrát cserél le, az illesztőprogramnak fel kell szabadítania az előző struktúrát.
Az illesztőprogramnak hivatkoznia kell az ebben az IRP-ben (ObReferenceObject) szereplő eszközök oem-jára. A PnP-kezelő szükség esetén eltávolítja a hivatkozást.
A függvény- vagy szűrőillesztőknek készen kell állniuk arra, hogy kezelni tudják az eszköz IRP-jét, miután az AddDevice rutinja befejeződött az eszközön. A buszvezetőknek készen kell állniuk arra, hogy közvetlenül az eszköz számbavétele után kezeljék BusRelations lekérdezését.
Az Plug and Play kisebb INTEGRÁCIÓS- kezelésének általános szabályaiért lásd Plug and Play.
Az alábbi alszakaszok a különböző lekérdezések kezeléséhez szükséges konkrét műveleteket ismertetik.
BusRelations-kérelem
Amikor a PnP-kezelő lekérdezi egy adapter vagy vezérlő buszkapcsolatait (gyermekeszközeit), a buszvezetőnek vissza kell adnia a buszon fizikailag jelen lévő eszközök PPO-jainak mutatóinak listáját. A buszvezető minden eszközt jelent, függetlenül attól, hogy elindultak-e. Előfordulhat, hogy a buszvezetőnek be kell állítania a buszeszközt annak megállapításához, hogy mely gyermekek vannak jelen.
Figyelmeztetés Az eszközobjektumok nem továbbíthatók olyan rutinnak, amely argumentumként használ egy oem-et, amíg a PnP-kezelő nem hoz létre eszközcsomópontot (devnode) az adott objektumhoz. (Ha az illesztőprogram átmegy egy eszközobjektumon, a rendszer hibaellenőrzést végez hibaellenőrzési 0xCA: PNP_DETECTED_FATAL_ERROR.) A PnP-kezelő a IRP_MN_QUERY_DEVICE_RELATIONS kérésre válaszul hozza létre a devnode-t. Az illesztőprogram nyugodtan feltételezheti, hogy az oem devnode akkor lett létrehozva, amikor IRP_MN_QUERY_RESOURCE_REQUIREMENTS kérést kap.
Az IRP-nek válaszoló buszillesztő a buszadapter vagy -vezérlő függvényillesztője, nem pedig annak a busznak a szülőbusz-illesztőprogramja, amelyhez az adapter vagy a vezérlő csatlakozik. A nem buszos eszközök függvényillesztői nem kezelik ezt a lekérdezést. Az ilyen illesztőprogramok csak adják át az IRP-t a következő alsó illesztőnek. (Lásd a következő ábrát.) A szűrőillesztők általában nem kezelik ezt a lekérdezést.
Windows Vista és újabb operációs rendszereken azt javasoljuk, hogy az illesztőprogramok mindig a IRP_MN_QUERY_DEVICE_RELATIONS IRP-t használják, és később fejezze be a feldolgozást. Ez a sorrend lehetővé teszi, hogy a rendszer aszinkron módon dolgozza fel a buszrelációs lekérdezéseket. (Windows Vista előtti operációs rendszereken az illesztőprogramok biztonságosan vissza tudják küldeni STATUS_PENDING a küldési rutinjukból, de a PnP-kezelő nem fedi át a buszrelációs lekérdezést semmilyen más művelettel.)
Az alábbi ábra bemutatja, hogyan kezelik az illesztőprogramok a buszkapcsolatok lekérdezését.
Az ábrán látható példában a PnP-kezelő IRP_MN_QUERY_DEVICE_RELATIONS küld a BusRelations az USB Hub-eszköz illesztőprogramjainak. A PnP-kezelő a központi eszköz gyermekeinek listáját kéri.
Az összes PnP-integrációs modulhoz hasonlóan a PnP-kezelő is elküldi az IRP-t az eszköz veremének legfelső illesztőjének.
Lehetséges, hogy egy választható szűrőillesztő a verem legfelső illesztőprogramja. A szűrőillesztők általában nem kezelik ezt az IRP-t; az IRP-t átadja a veremen. A szűrőillesztők kezelhetik ezt az IRP-t, például ha az illesztőprogram egy nem számozható eszközt tesz elérhetővé a buszon.
Az USB Hub buszillesztő kezeli az IRP-t.
Az USB Hub buszillesztő:
Létrehoz egy oem-et minden olyan gyermekeszközhöz, amely még nem rendelkezik ilyen eszközzel.
Minden olyan eszköz esetében, amely már nem található meg a buszon, megjelöli az oem inaktívként való megjelölését. A buszillesztő nem törli az ilyen PDF-eket.További információ a pdO-k törlésének időpontjáról: Eszköz eltávolítása.
Jelenti a buszon található gyermekeszközöket.
Minden gyermekeszköz esetében a buszvezető hivatkozik az oem-re, és a DEVICE_RELATIONS szerkezetében mutatót helyez az oem-hez.
Ebben a példában két PDO található: egy a joystick-eszközhöz, egy pedig a billentyűzet eszközhöz.
A buszvezetőnek ellenőriznie kell, hogy egy másik vezető már létrehozott-e DEVICE_RELATIONS struktúrát ehhez az IRP-hez. Ha igen, a buszvezetőnek hozzá kell adnia a meglévő információkat.
Ha a buszon nincs gyermekeszköz, a vezető nullára állítja a számot a DEVICE_RELATIONS struktúrában, és sikert ad vissza.
Beállítja a megfelelő értékeket az I/O állapotblokkban, és átadja az IRP-t a következő alsó illesztőnek. Az adapter vagy vezérlő buszillesztője nem hajtja végre az IRP-t.
Ha van ilyen, a választható alacsonyabb szűrő általában nem kezeli ezt az IRP-t. Egy ilyen szűrőillesztő átadja az IRP-t a veremen. Ha egy alacsonyabb szűrővel rendelkező illesztőprogram kezeli ezt az IRP-t, hozzáadhatja az OEM-eket a gyermekeszközök listájához, de nem törölheti a más illesztőprogramok által létrehozott PDO-kat.
A szülőbusz-illesztőprogram nem kezeli ezt az IRP-t, kivéve, ha ez az egyetlen illesztőprogram az eszközveremben (az eszköz nyers módban van). Mint minden PnP IRP- hez, a szülő buszvezető az IRP-t IoCompleteRequest.
Ha egy vagy több buszszűrő illesztőprogram található az eszköz veremében, az ilyen illesztőprogramok kezelhetik az IRP-t a buszillesztő felé vezető úton és/vagy az IRP-nek az eszközverem biztonsági mentésén (ha vannak IoCompletion rutinok). A PnP IRP szabályai szerint az ilyen illesztőprogramok a veremen lefelé haladva hozzáadhatnak PDO-kat az IRP-hez, és/vagy módosíthatják az IRP kapcsolatlistáját a verem biztonsági mentéséhez (IoCompletion rutinokban).
EjectionRelations kérelem
Az illesztőprogram minden olyan eszköz PPO-jára mutató mutatót ad vissza, amely fizikailag eltávolítható a rendszerből a megadott eszköz kibocsátásakor. Ne jelentse az eszköz gyermekeinek PDO-ját; A PnP-kezelő mindig azt kéri, hogy a gyermekeszközöket a szülőeszköz előtt távolítsák el.
A PnP-kezelő egy IRP_MN_EJECT IRP-t küld egy kijelzett eszközre. Az ilyen eszköz illesztőprogramja is kap egy eltávolítási IRP-t. Az eszköz kibocsátó kapcsolatai IRP_MN_REMOVE_DEVICE IRP-t kapnak (nem IRP_MN_EJECT IRP-t).
Csak a szülőbusz-illesztő válaszolhat egy EjectionRelations lekérdezésre az egyik gyermekeszközén. A függvény- és szűrőillesztőknek át kell adniuk azt az eszköz verem következő alsó illesztőprogramjának. Ha egy buszvezető ezt az IRP-t kapja az adapter vagy vezérlő függvényillesztőjeként, a buszvezető elvégzi a függvényillesztő feladatait, és át kell adnia az IRP-t a következő alsó illesztőnek.
PowerRelations-kérelem
A Windows 7-től kezdve a PowerRelations lekérdezés lehetővé teszi az illesztőprogram számára, hogy a PnP-számbavételt támogató szülőbusz és a buszon lévő számbavett gyermekeszköz közötti hagyományos kapcsolaton kívüli energiagazdálkodási kapcsolatot adjon meg. Ha például egy buszvezető nem tud számba adni egy gyermekeszközt a buszon, vagy ha egy eszköz egynél több busz gyermeke, a PowerRelations lekérdezés le tudja írni a gyermekeszköz és a busz energiaviszonyait.
A PnP-kezelő PowerRelations lekérdezést ad ki egy eszközhöz, amikor az eszköz illesztőprogramja meghívja a IoInvalidateDeviceRelations rutint, és megadja a PowerRelationsType paraméterértékét.
A lekérdezésre válaszul a céleszköz illesztőprogramja (vagyis a lekérdezés céleszköze) egy DEVICE_RELATIONS struktúrát biztosít, amely a power manager által a céleszköz bekapcsolása előtt bekapcsolandó egyéb eszközök PPO-jára mutató mutatókat tartalmaz. Ezzel szemben ezeket a többi eszközt csak a céleszköz kikapcsolása után kell kikapcsolni. A power manager a lekérdezés információi alapján garantálja, hogy ezek az eszközök a megfelelő sorrendben vannak be- és kikapcsolva.
Ez a rendezési garancia csak azokra a globális rendszerállapot-áttűnésekre vonatkozik, amelyek magukban foglalják az S1, S2, S3 (alvási), az S4 (hibernált) és az S5 (leállítási) rendszer energiaállapotait. A PowerRelations rendelési garancia nem vonatkozik a Dx eszköz energiaállapot-áttűnésére, amíg a rendszer az S0 (futó) rendszerállapotban marad, kivéve irányított futtatókörnyezeti energiagazdálkodás (DFx) áttűnéseket.
Ha a céleszköz egy speciális fájl (például lapozófájl, hibernált fájl vagy összeomlási memóriaképfájl) eszközútvonalán található, a céleszköz illesztőprogramjának egy további lépést kell végrehajtania, amikor egy IRP_MN_DEVICE_USAGE_NOTIFICATION IRP-t kezel, amelyben InPath igaz . Ennek az illesztőprogramnak biztosítania kell, hogy a powerrelations lekérdezés PDO-kkal rendelkező eszközök is támogathassák a speciális fájl eszközútvonalában való elhelyezést. A támogatás megerősítéséhez a céleszköz illesztőprogramjának először minden eszközre el kell küldenie a IRP_MN_DEVICE_USAGE_NOTIFICATION IRP-t, és ennek az IRP-nek ugyanazt a UsageNotification.Type kell megadnia, mint a céleszközt. Ha az IRP-t fogadó összes eszköz sikeresen befejezi az IRP-t egy sikeres állapotkóddal, a céleszköz illesztőprogramja sikeresen befejezheti a IRP_MN_DEVICE_USAGE_NOTIFICATION IRP-t. Ellenkező esetben az illesztőprogramnak hibaállapot-kóddal kell elvégeznie ezt az IRP-t.
Ha ugyanez az illesztőprogram olyan IRP_MN_DEVICE_USAGE_NOTIFICATION IRP-t kezel, amelyhez InPath hamis , az illesztőprogramnak a IRP_MN_DEVICE_USAGE_NOTIFICATION IRP-t ugyanazon függő eszközökre kell küldenie, mint abban az esetben, amikor InPath igaz . Az illesztőprogramnak azonban soha nem szabad hibaállapotkóddal befejeznie ezt az IRP-t, ha InPath hamis .
A PowerRelations lekérdezésre válaszoló illesztőprogramnak regisztrálnia kell a céleszköz-változási értesítéseket minden olyan eszközön, amelynek A PowerRelations lekérdezéshez megadott PD-jei vannak megadva. Az értesítések regisztrálásához az illesztőprogram meghívhatja az IoRegisterPlugPlayNotification rutint, és megadhatja EventCategory paraméterértékét EventCategoryTargetDeviceChange.
Eltávolítási kérelmek
Az illesztőprogram visszaadja azoknak az eszközöknek a PDO-jait, amelyek illesztőprogramjait el kell távolítani a megadott eszköz illesztőprogramjainak eltávolításakor. Ne jelentse az eszköz gyermekeinek PDO-ját; A PnP-kezelő már az eszköz eltávolítása előtt kéri a gyermekeszközök eltávolítását.
Az eltávolítási kapcsolatok eltávolításának sorrendje nincs meghatározva.
Az eszközverem bármely illesztőprogramja képes kezelni ezt a kapcsolattípus-lekérdezést. A függvények vagy szűrőillesztők kezelik az IRP-t, mielőtt átadják azt a következő alsó illesztőnek. A buszvezető kezeli az IRP-t, majd végrehajtja azt.
TargetDeviceRelation kérelem
A TargetDeviceRelation lekérdezés lehetővé teszi, hogy a PnP-kezelő lekérdezhesse a hardvert vezérlő PnP-eszközverem nem PnP-eszközveremét.
Az illesztőprogramok általában addig továbbítják a IRP_MN_QUERY_DEVICE_RELATIONS IRP-t, amíg az IRP el nem éri egy adott eszközverem alját. A nem PnP-verem alján lévő illesztőprogram ezután továbbítja vagy újra kiadja az IRP-t a megfelelő PnP-veremnek. A PnP-kezelő például küldhet egy TargetDeviceRelation lekérdezést a fájlrendszer verem tetején lévő eszközobjektumra, amely nem PnP-verem. A fájlrendszer verem minden eszközobjektuma átadja a lekérdezést az alatta lévő eszközobjektumnak, amíg a lekérdezés el nem éri a verem alján lévő eszközobjektumot. A verem legalacsonyabb eszközobjektuma továbbítaná vagy újból kiadná a TargetDeviceRelation lekérdezést a PnP-tárolókötet verem tetején lévő eszközobjektumnak, majd a lekérdezést a tárkötet verem alján lévő oem-nek továbbítja.
Az alábbi lista összefoglalja azokat a helyzeteket, amelyekben biztonságosan beszerezhet egy PnP-eszközverem alján található oem-hez mutató mutatót:
Eszközobjektum egy PnP-ben
A PnP-eszközveremben található eszközobjektumok megismerik a verem oem-jét, amikor meghívják az AddDevice rutint az eszközhöz. Az illesztőprogram biztonságosan gyorsítótárazza a mutatót az OEM-hez, ha a mutató használata megfelelően szinkronizálva van a bejövő IRP_MN_REMOVE_DEVICE üzenetekkel az eltávolítási zárolási rutinok használatával.
Eszközobjektum nem PnP-veremben, nem a verem alján
Olyan eszközobjektumok esetében, amelyek nem PnP-verem alján találhatók, az illesztő elküldhet egy TargetDeviceRelation lekérdezést, amely a megfelelő PnP-eszközverem alján található oem-hez mutató mutatót kér le.
Az eszköz fájlobjektuma
Az eszköz fájlobjektuma miatt az illesztőprogram meghívhatja IoGetRelatedDeviceObject az eszközobjektum lekéréséhez, majd kövesse az előző listaelem utasításait.
Az eszközobjektum kezelése
Az eszközobjektum leírója alapján az illesztőprogram meghívhatja ObReferenceObjectByHandle, hogy lekérje az eszköz fájlobjektumát, majd kövesse az előző listaelem utasításait.
A szülőbusz-vezetőnek kezelnie kell egy TargetDeviceRelation kapcsolati lekérdezést a gyermekeszközeihez. A buszvezető a gyermekeszköz oem-ére hivatkozik ObReferenceObject, és egy mutatót ad vissza a DEVICE_RELATIONS struktúrában lévő oem-hez. Ehhez a relációs típushoz csak egy oem mutató van a struktúrában. A PnP-kezelő eltávolítja az oem-re mutató hivatkozást, amikor az illesztőprogram vagy az alkalmazás nem regisztrál az eszközön való értesítésre.
Csak a szülőbusz-illesztőprogram válaszol egy TargetDeviceRelation lekérdezésre. A függvény- és szűrőillesztőknek át kell adniuk azt az eszköz verem következő alsó illesztőprogramjának. Ha egy buszvezető ezt az IRP-t kapja az adapter vagy vezérlő függvényillesztőjeként, a buszvezető elvégzi a függvényillesztő feladatait, és át kell adnia az IRP-t a következő alsó illesztőnek.
Ha egy illesztőprogram nincs oem-alapú veremben, az illesztőprogram egy új céleszköz-relációs lekérdezésIRP-t küld annak a fájlleíróhoz társított eszközobjektumnak, amelyen az illesztőprogram I/O-t hajt végre.
IRP- küldése
Az illesztőprogramok nem küldhetnek IRP_MN_QUERY_DEVICE_RELATIONSBusRelationsigényléséhez. Az illesztőprogramok nem korlátozódnak arra, hogy ezt az IRP-t elküldje RemovalRelations vagy EjectionRelations, de nem valószínű, hogy egy illesztőprogram ezt tenné.
Az illesztőprogramok lekérdezhetik TargetDeviceRelationeszközveremét. Az integrációs modulokkal kapcsolatos információkért lásd INTEGRÁCIÓS kezelésével kapcsolatos információkat. A következő lépések kifejezetten erre az IRP-re vonatkoznak:
Állítsa be az értékeket az IRP következő I/O-veremhelyén: állítsa MajorFunctionIRP_MJ_PNPértékre, állítsa MinorFunctionIRP_MN_QUERY_DEVICE_RELATIONSértékre, állítsa be paramétereket A.QueryDeviceRelations.TypeTargetDeviceRelation, és állítsa Irp->FileObject egy érvényes fájlobjektumra.
Inicializálja IoStatus.Status STATUS_NOT_SUPPORTED.
Ha egy illesztőprogram azért küldte el ezt az IRP-t, hogy a TargetDeviceRelationIRP_MN_QUERY_DEVICE_RELATIONS válaszul jelentse az oem-et, akkor az illesztőprogram jelenti az oem-et, és felszabadítja a visszaadott kapcsolatok struktúráját az IRP befejezésekor. Ha egy illesztőprogram más okból kezdeményezte ezt az IRP-t, az illesztőprogram felszabadítja a kapcsolati struktúrát, amikor az IRP befejezi és elhalasztja az oem-et, amikor már nincs rá szükség.
Követelmények
Fejléc |
Wdm.h (wdm.h, Ntddk.h vagy Ntifs.h) |
Lásd még
IoRegisterPlugPlayNotification
IRP_MN_DEVICE_USAGE_NOTIFICATION