Delen via


Afhandelingsroutines en IRQLs

De meeste dispatchroutines van stuurprogramma's worden aangeroepen in een willekeurige threadcontext op IRQL = PASSIVE_LEVEL, met de volgende uitzonderingen:

  • Alle dispatchroutines van stuurprogramma's op het hoogste niveau worden aangeroepen in de context van de thread die afkomstig is van de I/O-aanvraag. Dit is meestal een toepassingsthread in de gebruikersmodus.

    Met andere woorden, de verzendroutines van bestandssysteemstuurprogramma's en andere stuurprogramma's op het hoogste niveau worden aangeroepen in een niet-arbitraire threadcontext op IRQL = PASSIVE_LEVEL.

  • De routines DispatchRead, DispatchWrite en DispatchDeviceControl van apparaatstuurprogramma's op het laagste niveau en van tussenliggende stuurprogramma's die erboven in het pad voor systeempaginering zijn geplaatst, kunnen worden aangeroepen op IRQL = APC_LEVEL en in een willekeurige threadcontext.

    De DispatchRead - en/of DispatchWrite-routines , en elke andere routine die ook lees- en/of schrijfaanvragen verwerkt in een dergelijk apparaat of tussenliggend stuurprogramma op het laagste niveau, moet altijd aanwezig zijn. Deze stuurprogrammaroutines kunnen niet paginagebaseerd zijn of deel uitmaken van de pagina-image sectie van een stuurprogramma; ze mogen geen toegang hebben tot paginagebaseerd geheugen. Bovendien mogen ze niet afhankelijk zijn van blokkeringsaanroepen (zoals KeWaitForSingleObject met een time-out van niet-nul).

  • De DispatchPower-routine van stuurprogramma's in de sluimerstand en/of pagineringspaden kan worden aangeroepen op IRQL = DISPATCH_LEVEL. De DispatchPnP-routines van dergelijke stuurprogramma's moeten worden voorbereid om PnP-IRP_MN_DEVICE_USAGE_NOTIFICATION aanvragen te verwerken.

  • De DispatchPower-routine van stuurprogramma's die inschakelstroom nodig hebben bij het opstarten, kan worden aangeroepen op IRQL = DISPATCH_LEVEL.

  • De DispatchPower-, DispatchRead-, DispatchWrite-, DispatchDeviceControl- en DispatchInternalDeviceControl-routines kunnen allemaal worden aangeroepen op IRQL <= DISPATCH_LEVEL.

Zie Hardwareprioriteiten beheren voor meer informatie.