Dela via


Introduktion till standardrutiner för drivrutin

Varje drivrutin i kernelläge konstrueras kring en uppsättning systemdefinierade, standarddrivrutinsrutiner. Drivrutiner i kernelläge bearbetar I/O-begärandepaket (IRP:er) inom dessa standardrutiner genom att anropa systemspecifika drivrutinsstödrutiner.

Alla förare, oavsett nivå i en kedja av anslutna förare, måste ha en grundläggande uppsättning standardrutiner för att kunna bearbeta IRP:er. Om en drivrutin måste implementera ytterligare standardrutiner beror på om drivrutinen styr en fysisk enhet eller är skiktad över en fysisk enhetsdrivrutin, samt på den underliggande fysiska enhetens karaktär. Drivrutiner på lägsta nivå som styr fysiska enheter har fler nödvändiga rutiner än drivrutiner på högre nivå, vilket vanligtvis skickar IP-adresser till en lägre drivrutin för bearbetning.

Standarddrivrutinsrutiner kan delas in i två grupper: de som varje kernel-mode-drivrutin måste ha, och de som är valfria, beroende på drivrutinstyp och plats i enhetsstacken.

I följande tabell visas de standardrutiner som krävs.

Nödvändiga standarddrivrutinsrutiner Avsikt Där beskrivs
DriverEntry Initierar drivrutinen och dess drivrutinsobjekt. Skriva en DriverEntry-rutin
AddDevice Initierar enheter och skapar enhetsobjekt. Skriva en AddDevice-rutin
Dispatch-rutiner Ta emot och bearbeta IRP:er. Skriva dispatch-rutiner
Lasta av Frigöra systemresurser som hämtats av drivrutinen. Skriva en avlastningsrutin

I följande tabell visas flera valfria rutiner.

Valfria standardrutiner för drivrutiner Avsikt Där det beskrivs
Återinitiera Slutför drivrutinsinitiering om DriverEntry inte kan. Skriva en återinitieringsrutin
StartIo Startar en I/O-åtgärd på en fysisk enhet. Skriva en StartIO-rutin
Avbryt tjänstrutin Sparar tillståndet för en enhet när den avbryter. Skriva en ISR
Uppskjutna proceduranrop Slutför bearbetningen av ett enhetsavbrott när en ISR har sparat enhetens tillstånd. DPC-objekt och DPC:er
SynchCritSection Synkroniserar åtkomst till drivrutinsdata. Använda kritiska avsnitt
AdapterControl Initierar DMA-operationer. Adapterobjekt och DMA
IoCompletion Slutför en drivrutins bearbetning av en IRP. #B0 Slutför IRP:er #C1
Avbryt Avbryter en drivrutins bearbetning av en IRP. Avbryta IRP:er
CustomTimerDpc, IoTimer Tidsinställning och synkronisering av händelser. Synkroniseringstekniker

Det aktuella IRP- och målenhetsobjektet är indataparametrar för många standardrutiner. Varje drivrutin bearbetar varje IRP stegvis genom sina standardrutiner.

Enligt konventionen förbereder de systemspecifika drivrutinerna ett identifierande, drivrutinsspecifikt eller enhetsspecifikt prefix till namnet på varje standardrutin förutom DriverEntry. I den här dokumentationen används till exempel "DD", som du ser i bilden i Introduktion till drivrutinsobjekt. Genom att följa den här konventionen blir det enklare att felsöka och underhålla drivrutiner.