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.
Amikor egy illesztőprogram kézbesítési rutinja IRP-t kap, meg kell hívnia az IoGetCurrentIrpStackLocation parancsot , hogy ellenőrizze a saját I/O-verem helyét, és megállapíthassa, hogy a paraméterek érvényesek-e. Ha a meghajtó nem tudja teljesíteni és befejezni a kérést, a következők egyikét teheti:
Adja át az IRP-t az alacsonyabb szintű illesztőprogramok további feldolgozásához.
Hozzon létre egy vagy több új I/O kéréscsomagot (IRP), és adja át azokat alacsonyabb szintű illesztőprogramoknak.
A magasabb szintű illesztőknek az alábbiak szerint kell átadniuk egy I/O-kérést egy következő alacsonyabb illesztőprogramnak:
Ha az illesztőprogram átadja a bemeneti IRP-t a következő alsó szintű illesztőnek, a küldési rutinnak meg kell hívnia az IoSkipCurrentIrpStackLocation vagy az IoCopyCurrentIrpStackLocationToNext metódust a következő alsó illesztő I/O veremhelyének beállításához.
Ha az illesztőprogram meghívja az IoAllocateIrp-et egy vagy több további integrációs modul lefoglalására az alacsonyabb illesztőprogramok számára, a küldési rutinnak inicializálnia kell a következő alacsonyabb szintű illesztőprogram I/O-veremhelyét az Intermediate-Level-illesztő integrációs moduljainak feldolgozásában leírt lépések végrehajtásával.
A küldési rutin bizonyos kérések esetében módosíthatja az illesztőprogram következő alacsonyabb szintű I/O-veremhelyének néhány paraméterét. Egy magasabb szintű illesztőprogram például módosíthatja egy nagy átviteli kérelem paramétereit, ha a mögöttes eszköz ismert átviteli kapacitáskorláttal rendelkezik, és újra felhasználhatja az IRP-t, hogy részleges átviteli kéréseket küldjön az alapul szolgáló eszközillesztőnek.
Hívja meg IoSetCompletionRoutine-t.
Ha a küldési rutin egy fogadott IRP-t ad át a következő alacsonyabb szintű illesztőprogramnak, az IoCompletion rutin beállítása nem kötelező, de hasznos, mivel a rutin olyan feladatokat hajthat végre, mint például annak meghatározása, hogy az alacsonyabb szintű illesztőprogramok hogyan fejezték be a kérést, az IRP újbóli használata részleges átvitelekhez, az illesztőprogram által fenntartott állapot frissítése, ha nyomon követi az integrációs modulokat, és egy hibával visszaadott kérés újrapróbálkozása.
Ha a diszpécser rutin új IRP-ket foglalt le, az IoCompletion rutin beállítása szükséges, mert a rutinnak minden IRP-t el kell engednie, miután az alacsonyabb szintű illesztőprogramok befejezték.
Az IoCompletion rutinokkal kapcsolatos további információkért lásd a IRP-k befejezését ismertető témakört.
Hívja meg az IoCallDriver-t az egyes IRP-ekkel, amelyeket alacsonyabb illesztőprogramok dolgoznak fel.
Egy megfelelő NTSTATUS-értéket ad vissza, például:
ÁLLAPOT_FOLYAMATBAN
A meghajtó az IRP aszinkron kérés, például IRP_MJ_READ vagy IRP_MJ_WRITE esetén általában a STATUS_PENDING-et ad vissza.
Az IoCallDriver hívásának eredménye
Az illesztőprogram gyakran visszaadja az IoCallDriver hívásának eredményét, ha a bemeneti IRP szinkron kérés, például IRP_MJ_CREATE.
A legalacsonyabb szintű eszközillesztők minden olyan IRP-t átadnak, amelyet a küldési rutinban nem tud elvégezni más illesztőprogram-rutinokra az alábbiak szerint:
Hívja meg az IoMarkIrpPendinget a bemeneti IRP-vel.
Hívja meg az IoStartPacketet , hogy az IRP-t továbbítsa vagy várólistára továbbítja az illesztőprogram StartIo-rutinjának , kivéve, ha az illesztőprogram a saját belső IRP-sorba állítását kezeli, az Driver-Managed IRP-üzenetsorokban leírtak szerint.
Ha az illesztőprogram nem rendelkezik StartIo-rutinnal, de visszavonható IRP-ket kezel, akkor regisztrálnia kell egy Cancel rutint, vagy implementálnia kell egy visszavonásbiztos IRP várólistát. A Cancel rutinokkal kapcsolatos további információkért lásd a IRP-k megszakítása című témakört.
Adja vissza STATUS_PENDING.