Introduktion till drivrutinsobjekt

I/O-chefen skapar ett drivrutinsobjekt för varje drivrutin som har installerats och lästs in. Drivrutinsobjekt definieras med hjälp av DRIVER_OBJECT strukturer.

När I/O-hanteraren anropar en drivrutins DriverEntry-rutin tillhandahåller den adressen till drivrutinens drivrutinsobjekt. Drivrutinsobjektet innehåller lagring för startpunkter till många av förarens standardrutiner. Föraren ansvarar för att fylla i dessa startpunkter.

Följande bild illustrerar ett drivrutinsobjekt med den uppsättning systemdefinierade standardrutiner som drivrutiner på lägsta och högre nivå kan eller måste ha.

Varje standardrutin med en asterisk bredvid dess namn tar emot ett I/O-begärandepaket (IRP) som indata. Var och en av dessa standardrutiner tar också emot en pekare till målenhetsobjektet för I/O-begäran.

diagram som illustrerar ett drivrutinsobjekt.

I/O-chefen definierar drivrutinsobjekttypen och använder drivrutinsobjekt för att registrera och spåra information om inlästa bilder av drivrutiner. Observera att startpunkterna för sändning (DDDispatchXxx via DDDispatchYyy) i drivrutinsobjektet motsvarar de viktigaste funktionskoderna (IRP_MJ_XXX) som skickas på I/O-stackplatserna för IRP:er.

I/O-chefen dirigerar varje IRP först till en leveransrutin som tillhandahålls av föraren. En rutin för att skicka drivrutiner på lägsta nivå anropar vanligtvis en I/O-supportrutin (IoStartPacket) för att köa (eller vidarebefordra) varje IRP som har giltiga argument till förarens StartIo-rutin . StartIo-rutinen startar den begärda I/O-åtgärden på en viss enhet. Drivrutiner på högre nivå har vanligtvis inte StartIo-rutiner , men det kan de.