Delen via


Passive-Level ISRs

Vanaf Windows 8 kunnen stuurprogrammaframeworks (KMDF) en gebruikersmodus-stuurprogramma's (UMDF) optioneel hun interruptserviceroutines (ISR's) registreren om op passief niveau te worden uitgevoerd.

Zie de volgende onderwerpen voor meer informatie over ISR's op passief niveau voor KMDF- en UMDF-stuurprogramma's:

Wanneer een randapparaat een GPIO-pin (General-Purpose I/O) gebruikt om een interruptaanvraag door te sturen naar de processor, stelt de Windows-interruptabstractie het stuurprogramma voor dit apparaat in staat om de hardwarespecifieke details van de GPIO-controller, waartoe deze pin behoort, te negeren. Wanneer de kerneltraphandler wordt uitgevoerd als reactie op een door GPIO geregelde interruptaanvraag van het apparaat, wist of maskeert deze handler, indien nodig, automatisch de interrupt in de GPIO-hardwareregisters. Bovendien roept de kernel-traphandler rechtstreeks de ISR van het apparaat aan of plant deze ISR in om in een andere thread te worden uitgevoerd.

GpIO-hardwareregisters zijn vaak toegewezen aan het geheugen, in welk geval de kernel trap-handler rechtstreeks toegang heeft tot deze bij DIRQL. De hardwareregisters van het randapparaat zijn echter mogelijk niet toegewezen aan het geheugen. In dat geval moet het stuurprogramma van het randapparaat I/O-aanvragen gebruiken om ze te openen. Zo ja, dan moet de ISR voor het stuurprogramma van het randapparaat worden uitgevoerd op IRQL = PASSIVE_LEVEL, zodat het I/O-aanvragen kan gebruiken om de interrupt te dempen of om het eerste onderhoud van de interrupt uit te voeren. Een ISR op passief niveau kan een I/O-aanvraag synchroon verzenden en, indien nodig, blokkeren totdat de aanvraag is voltooid.

Ter ondersteuning van een isr op passief niveau voor een randapparaat dat een door edge geactiveerd interruptaanvraagsignaal genereert, wist de kernel trap-handler de in behandeling zijnde interrupt op de GPIO-pincode en plant vervolgens dat de ISR wordt uitgevoerd in een kernelthread op passief niveau.

Ter ondersteuning van een ISR op passief niveau voor een randapparaat dat een niveau-geactiveerd interruptaanvraagsignaal genereert, maskeert de kernel trap-handler de lopende interrupt op de GPIO-pincode en plant vervolgens de ISR om te worden uitgevoerd in een kernelthread op passief niveau. De ISR is verantwoordelijk voor het wissen van de interruptaanvraag in het randapparaat. Nadat de ISR is teruggekeerd, ontmaskert de kernelthread de interrupt bij de GPIO-pin.

Omdat de interrupt gemaskeerd blijft totdat de ISR terugkeert, moet de passieve ISR van het apparaat alleen het eerste onderhoud van de interrupt uitvoeren en vervolgens terugkeren om de passieve ISR's van andere apparaten niet te vertragen. Normaal gesproken moet het stuurprogramma aanvullende interruptgerelateerde verwerking uitstellen voor de interruptwerkrolthread, die met een lagere prioriteit wordt uitgevoerd dan de ISR.