Driver-Managed IRP-üzenetsorok

A fájlrendszer-illesztőprogramok kivételével az I/O-kezelő társít egy eszközsor-objektumot (az integrációs modulok sorba állításához) minden olyan eszközobjektumhoz, amelyet egy illesztőprogram hoz létre.

A legtöbb eszközillesztő meghívja az I/O-kezelő támogatási rutinjait a társított eszközsor használatára, amely az I/O-kéréscsomagokat tartalmazza, amikor az eszköz I/O-kérései egy céleszköz-objektum esetén gyorsabban érkeznek, mint amennyit az illesztőprogram feldolgozhatja őket a befejezésig. Ezzel a technikával az I/O-kérelmi csomagok (IRP-k) egy illesztőprogram által biztosított StartIo rutinba kerülnek.

A jó teljesítmény érdekében a legtöbb köztes illesztőprogram egyszerűen továbbadja az integrációs modulokat az alacsonyabb illesztőprogramoknak, amint bejönnek, így a köztes illesztőprogramok szinte soha nem használják a megfelelő eszközobjektumokhoz társított eszközsorokat.

Egy illesztőprogramot azonban úgy is megtervezhet, hogy kezelje az IRP-k belső sorait egy vagy több eszközsor, zárolt sor vagy törlésbiztos sor beállításával. Ez a megközelítés különösen akkor lehet hasznos, ha az illesztőprogram olyan eszközt vezérel, amely átfedésben van az I/O-műveletekkel. Ilyen eszköz esetén nehéz lehet két vagy több integrációs modul egyidejű feldolgozását kezelni ugyanahhoz a céleszköz-objektumhoz egyetlen üzenetsor használatával.

A belső sor létrehozásának legegyszerűbb módja a megszakításbiztos IRP sor keretrendszer használata. Az illesztőprogramban implementálhatja a választott sorbanállási mechanizmust. Ezután az IoCsqInitialize használatával regisztrálhat olyan visszahívási rutinokat, amelyek kezelik az IRP beszúrását és törlését, valamint az üzenetsor zárolását és zárolásának feloldását. A mégse biztonságos IRP-üzenetsor-keretrendszer biztosítja az IoCsqInsertIrp, az IoCsqRemoveIrp és az IoCsqRemoveNextIrp rutinokat, amelyek automatikusan a visszahívási rutinokat használják az illesztőprogram üzenetsorának biztonságos beszúrásához és eltávolításához. A rendszer a visszahívási rutinokkal is biztonságosan eltávolítja a törölt I/O kéréspaketteket.

Dönthet amellett is, hogy kiegészítő várakozási sorokat állít be az IRP-khez egy eszközvezérlő illesztőprogramjában heterogén fizikai eszközökhöz. Az SCSI-portillesztő például eszköz sor objektumokat használ a belső sorokhoz. Ez az illesztőprogram rendelkezik StartIo-rutinnal, és további eszközsor-objektumokat állít be kiegészítő sorokként, az általa létrehozott eszközobjektumhoz társított eszközsor mellett, amely egy HBA-t jelöl. Az SCSI-portillesztő kiegészítő eszközsoraival a HBA által vezérelt SCSI-busz(ok) adott logikai egységeihez kötött IRP-ket tart.

A rendszer hajlékonylemez-vezérlőillesztője olyan illesztőprogram, amely nem rendelkezik StartIo-rutinnal, és egy zárolt várakozási sort használ. Ez az illesztőprogram beállít egy duplán összekapcsolt, szinkronizált sort, amelybe az illesztőprogram és az eszköz számára dedikált szál beszúrja és eltávolítja az IRP-ket.

A Kernel határozza meg az eszközsor objektumtípusát. A vezetői támogatási összetevő rutinokat biztosít az összehangolt várakozási sorokban található IRP-k beszúrásához és eltávolításához. A Windows XP és a Windows újabb verzióihoz készült illesztőprogramok a megszakításmentes IRP-üzenetsorok használatával kezelhetik az IRP-várólistákat .

Az alábbi szakaszok ismertetik az eszközsorok, az összezárt sorok és a törlésbiztos sorok használatát.

Eszközsorok beállítása és használata

Eszközsorok kezelése

Összekapcsolt üzenetsorok beállítása és használata

Összekapcsolt üzenetsorok kezelése egy Driver-Created szál segítségével

IRP QueuesCancel-Safe