DispatchRead-, DispatchWrite- och DispatchReadWrite-rutiner

En drivrutins DispatchRead- och DispatchWrite-rutiner hanterar IRP:er med I/O-funktionskoderna IRP_MJ_READ respektive IRP_MJ_WRITE. Alternativt kan en kombinerad DispatchReadWrite-rutin hantera IRP:er för båda dessa I/O-funktionskoder.

Varje drivrutin för en enhet som data kan överföras till systemet från måste ha en DispatchRead-rutin . Varje drivrutin för en enhet som data kan överföras till från systemet måste ha en DispatchWrite-rutin . Alla drivrutiner som överför data i båda riktningarna kan ha en kombinerad DispatchReadWrite-rutin .

Drivrutiner på lägre nivå hanterar IRP_MJ_READ och IRP_MJ_WRITE begäranden asynkront. Därför måste DispatchRead - och/eller DispatchWrite-rutiner i drivrutiner på högsta nivå vidarebefordra dessa begäranden för vidare bearbetning, förutsatt att begäran har giltiga parametrar i drivrutins I/O-stackplatsen för IRP.

Om en drivrutin konfigurerar sina enhetsobjekt för buffrad eller direkt I/O påverkar hur den hanterar överföringsbegäranden. I synnerhet kan en drivrutin som använder direkt I/O för att utföra DMA-åtgärder behöva dela upp stora överföringsbegäranden i en sekvens med mindre överföringsåtgärder för att uppfylla en IRP_MJ_READ eller IRP_MJ_WRITE begäran. Mer information finns i Indata-/utdatatekniker.

Följande underavsnitt beskriver några av design- och implementeringsövervägandena för DispatchReadWrite-rutiner i drivrutiner på lägsta nivå som använder buffrad I/O och direkt I/O, samt i drivrutiner på högre nivå som ligger ovanför dem:

Hantera överföringar asynkront

DispatchReadWrite med buffrad I/O

DispatchReadWrite med direkt I/O

DispatchReadWrite i Higher-Level drivrutiner

Sammanfattning av läs-/skrivrutiner