Valfria dispatch-rutiner

Drivrutiner kan innehålla följande sändningsrutiner:

  • DispatchCleanup

    IRP_MJ_CLEANUP anger att det sista handtaget för ett filobjekt som är associerat med målenhetsobjektet stängs. Utestående I/O-begäranden för filobjektet kan fortfarande finnas. Drivrutiner kan implementera en DispatchCleanup-rutin för att utföra rensning som inte är specifik för ett visst filhandtag. Förare kan också använda sin DispatchClose-rutin för samma ändamål.

  • DispatchQueryInformation, DispatchSetInformation

    Vissa drivrutiner på högsta nivå kan behöva bearbeta IRP_MJ_QUERY_INFORMATION och IRP_MJ_SET_INFORMATION IRP:er. Sådana begäranden anger att ett program i användarläge, komponent i kernelläge eller drivrutin har begärt information om längden på filobjektet (som representerar drivrutinens enhetsobjekt) för vilket användarens begärande har ett handtag, eller att användarens begärande försöker ange ett filslut på filobjektet.

    Parallella drivrutiner för klass och serieenheter hanterar dessa begäranden genom att ange FILE_STANDARD_INFORMATION eller FILE_POSITION_INFORMATION längd eller position till noll. Andra drivrutiner på högsta nivå bör ha stöd för dessa begäranden, särskilt om ett program i användarläge eller en drivrutin i kernelläge kan anropa C-körningsfunktioner för att manipulera filobjektet. Filsystemdrivrutiner måste ha mer stöd för dessa begäranden än de här drivrutinerna på högsta nivån.

  • DispatchFlushBuffers

    En drivrutin som cachelagrar data på en enhet eller buffrar data internt i förarallokerat minne kan ta emot IRP_MJ_FLUSH_BUFFERS. Mottagandet av den här begäran anger att drivrutinen ska skriva sina buffrade data eller tömma ut cachelagrade data till enheten, eller ta bort buffrade eller cachelagrade data som lästes från enheten.

    Till exempel stöder systemets tangentbords- och musklassdrivrutiner, som har interna ringbuffertar för indata från sina enheter, flush-begäran. Drivrutiner för masslagringsenheter och drivrutiner som ligger ovanför dem stöder också den här begäran.

  • DispatchShutdown

    Alla drivrutiner som troligen anropas innan systemet stängs av måste hantera IRP_MJ_SHUTDOWN. DispatchShutdown-rutinen bör genomföra den drivrutinsbestämda rensning som krävs innan strömhanteraren skickar en set-power-IRP för att stänga av systemet. En drivrutin kan anropa IoRegisterShutdownNotification eller IoRegisterLastChanceShutdownNotification för att registrera sig för avstängningsmeddelande.

Drivrutiner för masslagringsenheter och mellanliggande drivrutiner som läggs över dem kan förlita sig på en filsystemdrivrutin på högsta nivå för att skicka dem avstängnings-IRP:er när systemet håller på att stängas av. Det innebär att FSD ansvarar för att se till att cachelagrade fildata skrivs ut till kringutrustning, anropar underliggande drivrutiner för att rensa data från sina enhetscachen eller buffertar (om några) och så vidare innan systemet stängs av.

Drivrutinen för en masslagringsenhet som cachelagrar data internt måste tillhandahålla DispatchShutdown - och DispatchFlushBuffers-rutiner . Om en masslagringsdrivrutin buffrar data i minnet men dess enhet inte har någon intern cache, måste den också tillhandahålla DispatchShutdown - och DispatchFlushBuffers-rutiner .

Alla mellanliggande drivrutinslager ovanför en drivrutin som hanterar IRP_MJ_FLUSH_BUFFERS och IRP_MJ_SHUTDOWN begäranden tillhandahåller även DispatchShutdown - och DispatchFlushBuffers-rutiner .