Et udskudt procedureopkald (DPC) er en afbrydningshåndteringsmekanisme i Microsoft Windows-operativsystemet, som drivere kan henvise til, når de kører bestemte processer. DPC tillader, at en opgave aktiveres, men ikke udføres, fra et højt prioriteret interrupt-anmodningsniveau (IRQL). Dette giver en driver mulighed for hurtigt at behandle en ISR (High-Level Interrupt Service Routine), mens den udsætter udførelsen af IRQL-koder på lavere niveau. Drivere bruger DPC'er til at planlægge input / output (I / O) operationer. Drivere er software, der bruges af Windows til at kommunikere med hardwareenheder.
Overførsler
En enhedsdriver til kernetilstand håndterer traditionelt overførslen af en lyd- eller videodatastrøm fra eller til en ekstern enhed. Databehandlingen af enhedsdriverne er afbrydelsesdrevet. Den eksterne hardware genererer rutinemæssigt afbrydelser for at anmode enhedsdriveren om at overføre den næste batch af data. En enhedsdriver kan ikke behandle data med det samme i sin afbrydelsesrutine; således skal operativsystemet udløse en tilbagekaldningsrutine, som er DPC. Kernetilstand eller systemtilstand og brugertilstand er driftsformerne for din centralbehandlingsenhed. Kernen styrer alle systembehandlingsaktiviteter.
Planlægning
Begrebet et udskudt procedureopkald findes kun i kernetilstand. Operativsystemet holder DPC'erne planlagt af enhedsdriverne i en kø. Hvis dit system skal behandle afbrydelser, kontrollerer kernen DPC-køen og udfører den første DPC, hvis der ikke er nogen afbrydelser, og ingen DPC-processer kører. DPC er den højest prioriterede tråd i systemet, da DPC-købehandlingen finder sted, inden afsenderen vælger en tråd og tildeler dette til CPU'en. DPC'er har tre prioritetsniveauer: lav, medium og høj.
Processer
Hver DPC er forbundet med et systemdefineret DPC-objekt. Når en driver registrerer en DPCForslr-rutine, initialiserer systemet det tidligere definerede DPC-objekt. Hvis der kræves mere end én DPC, opretter en driver yderligere DPC-objekter kendt som CustomDPC-rutiner. DPCForlsr rutinen håndterer flere processer; det fuldfører I / O-operationen beskrevet af input / output-anmodningspakkerne (IRP), deques den næste IRP, indstiller input / output-status i den modtagne IRP og processen til at fuldføre anmodningen.
Rutiner
Normalt har en enhedsdriver, der har en afbrydelsesrutine mindst en DPCForIsr- eller CustomDPC-rutine til at fuldføre behandlingen af afbrydelsesdrevne I / O-operationer. Ifølge Open Systems Resources, Inc. afhænger den grundlæggende årsag til, at en driver har en enkelt DPCForlsr-rutine, et sæt CustomDPC-rutiner eller begge dele, arten af den underliggende enhed og det sæt I / O-anmodninger, den skal understøtte. En chaufførs ISR skal ringe til IoRequestDPC til afbrydelsesdrevne I / O-operationer ved hjælp af DPCForlsr-rutiner. Omvendt skal ISR for overlappende operationer, afbrydelsesdrevne I / O-operationer ved hjælp af CustomDPC-rutiner, kalde KeInsertQueueDPC.