Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktiga avsnitt är kodavsnitt som kräver exklusiv åtkomst till maskinvaruresurser eller drivrutinsdata. Det vill: koden får inte avbrytas av annan kod som kan referera till samma resurser eller data, och resurserna eller data får inte refereras av mer än en processor i taget.
Kritiska sektioner bör begränsas till ISR och SynchCritSection rutiner. Systemet anropar dessa rutiner först efter att den aktuella processorns IRQL har höjts till enhetens DIRQL- värde och förvärvat ett spinlock. När en SynchCritSection- rutin returnerar släpper systemet spinnlåset och sänker processorns IRQL.
Om processorns IRQL höjs till enhetens DIRQL-värde hindras den aktuella processorn från att avbrytas, förutom av en enhet med högre prioritet. Genom att erhålla ett spinnlås förhindras att andra processorer kör någon kritisk sektionskod som är associerad med det spinnlåset. (Det här spinnlåset kallas ibland för ett avbrottsspinnlås.)
En enhetsdrivrutins StartIo och DpcForIsr eller CustomDpc- rutiner måste ofta komma åt samma maskinvaruresurser (till exempel enhetsregister eller annat bussrelativt minne) eller drivrutinsunderhållna data som förarens ISR. Beroende på drivrutinens enhet eller design kan dess hantering, AdapterControl, ControllerControleller tidsrutiner också komma åt maskinvaruresurser eller drivrutinsunderhållen data.
Om du vill anropa ett icke-ISR-kritiskt avsnitt måste en drivrutin använda KeSynchronizeExecution- rutin. Den här rutinen accepterar adressen för en SynchCritSection- rutin som indata, tillsammans med information om drivrutinsdefinierad kontext och en pekare för avbrottsobjekt. Systemet använder brytobjektpekaren för att fastställa DIRQL och spinnlåset som ska användas med SynchCritSection rutin. (Drivrutinen angav tidigare dessa värden med hjälp av IoConnectInterrupt-funktionens SpinLock- och SynkroniseraIrql parametrar.)