Ein verzögerter Prozeduraufruf (DPC) ist ein Interrupt-Behandlungsmechanismus im Microsoft Windows-Betriebssystem, auf den sich Treiber beziehen können, wenn bestimmte Prozesse ausgeführt werden. Mit DPC kann eine Task von einer hoch priorisierten Interrupt-Anforderungsebene (IRQL) aus aktiviert, jedoch nicht ausgeführt werden. Dies ermöglicht einem Treiber, eine Interrupt-Service-Routine (ISR) auf hoher Ebene schnell zu verarbeiten, während die Ausführung von IRQL-Codes auf niedrigerer Ebene verzögert wird. Treiber verwenden DPCs, um Eingabe- / Ausgabevorgänge (E / A) zu planen. Treiber sind Software, die von Windows zur Kommunikation mit Hardwaregeräten verwendet wird.
Transfers
Ein Gerätetreiber im Kernelmodus übernimmt normalerweise die Übertragung eines Audio- oder Videodatenstroms von oder zu einem externen Gerät. Die Datenverarbeitung der Gerätetreiber erfolgt Interruptgesteuert. Die externe Hardware generiert routinemäßig Interrupts, um den Gerätetreiber zur Übertragung des nächsten Datenstapels aufzufordern. Ein Gerätetreiber kann Daten in seiner Interrupt-Routine nicht sofort verarbeiten. Daher muss das Betriebssystem eine Rückrufroutine auslösen, die der DPC ist. Der Kernelmodus oder Systemmodus und der Benutzermodus sind die Betriebsmodi Ihrer zentralen Verarbeitungseinheit. Der Kernel steuert alle Systemverarbeitungsaktivitäten.
Terminplanung
Das Konzept eines verzögerten Prozeduraufrufs existiert nur im Kernelmodus. Das Betriebssystem hält die von den Gerätetreibern geplanten DPCs in einer Warteschlange. Wenn Ihr System Interrupts verarbeiten muss, überprüft der Kernel die DPC-Warteschlange und führt den ersten DPC aus, wenn keine Interrupts vorhanden sind und keine DPC-Prozesse ausgeführt werden. Der DPC ist der Thread mit der höchsten Priorität im System, da die Verarbeitung der DPC-Warteschlange erfolgt, bevor der Dispatcher einen Thread auswählt und dieser der CPU zuordnet. DPCs haben drei Prioritätsstufen: niedrig, mittel und hoch.
Prozesse
Jeder DPC ist mit einem vom System definierten DPC-Objekt verknüpft. Wenn ein Treiber eine DPCForslr-Routine registriert, initialisiert das System das zuvor definierte DPC-Objekt. Wenn mehr als ein DPC erforderlich ist, erstellt ein Treiber zusätzliche DPC-Objekte, die als CustomDPC-Routinen bezeichnet werden. Die DPCForlsr-Routine verarbeitet mehrere Prozesse. Er beendet die durch die Eingabe / Ausgabe-Anforderungspakete (IRP) beschriebene E / A-Operation, dekodiert die nächste IRP, setzt den Eingabe / Ausgabe-Status in der empfangenen IRP und den Prozess, um die Anforderung abzuschließen.
Routinen
Normalerweise hat ein Gerätetreiber mit einer Interrupt-Serviceroutine mindestens eine DPCForIsr- oder CustomDPC-Routine, um die Verarbeitung von Interrupt-gesteuerten E / A-Vorgängen abzuschließen. Laut Open Systems Resources, Inc. hängt der grundlegende Grund dafür, dass ein Treiber über eine einzige DPCForlsr-Routine verfügt, einen Satz von CustomDPC-Routinen oder beides von der Art des zugrunde liegenden Geräts und dem Satz von E / A-Anforderungen ab, die er unterstützen muss. Die ISR eines Treibers muss IoRequestDPC für Interrupt-gesteuerte E / A-Vorgänge mithilfe von DPCForlsr-Routinen aufrufen. Bei überlappenden Operationen, Interrupt-gesteuerten E / A-Vorgängen, die CustomDPC-Routinen verwenden, muss ISR dagegen KeInsertQueueDPC aufrufen.