KeSetTargetProcessorDpcEx-Funktion (wdm.h)
Die KeSetTargetProcessorDpcEx-Routine gibt den Prozessor an, auf dem eine DPC-Routine ausgeführt wird.
Syntax
NTSTATUS KeSetTargetProcessorDpcEx(
[in, out] PKDPC Dpc,
[in] PPROCESSOR_NUMBER ProcNumber
);
Parameter
[in, out] Dpc
Ein Zeiger auf das DPC-Objekt des Aufrufers. Dieser Parameter verweist auf eine KDPC-Struktur , bei der es sich um eine undurchsichtige Systemstruktur handelt, die das DPC-Objekt darstellt. Dieses Objekt muss zuvor von der KeInitializeDpc-Routine initialisiert worden sein.
[in] ProcNumber
Ein Zeiger auf eine vom Aufrufer zugewiesene PROCESSOR_NUMBER Struktur, die den Zielprozessor identifiziert, in dem der DPC in die Warteschlange gestellt und ausgeführt wird. Diese Struktur gibt eine Gruppe und einen Prozessor innerhalb dieser Gruppe an.
Rückgabewert
KeSetTargetProcessorDpcEx gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Andernfalls wird Folgendes zurückgegeben:
Rückgabecode | Beschreibung |
---|---|
|
Der ProcNumber-Parameter verweist auf eine ungültige Prozessornummer. |
Hinweise
Jeder Prozessor in einem Multiprozessorsystem verfügt über eine eigene DPC-Warteschlange. KeSetTargetProcessorDpcEx gibt an, welche Prozessorwarteschlange das System verwenden soll, wenn der Treiber die KeInsertQueueDpc - oder IoRequestDpc-Routine aufruft, um eine DPC-Warteschlange für die spätere Ausführung in die Warteschlange zu stellen.
KeSetTargetProcessorDpcEx kann den Zielprozessor sowohl für normale DPCs als auch für Thread-DPCs angeben. Ein gewöhnlicher DPC kann nicht einmal durch einen Thread mit hoher Priorität vorenthalten werden, aber ein threadbasierter DPC kann durch zeitkritische Threads mit ausreichend hohen Prioritäten vorenthalten werden.
Eine verwandte Routine, KeSetTargetProcessorDpc, gibt einen Zielprozessor für einen DPC an, aber diese Routine gibt im Gegensatz zu KeSetTargetProcessorDpcEx keine Gruppe für den Zielprozessor an. Ab Windows 7 geht KeSetTargetProcessorDpc davon aus, dass der Zielprozessor zur Gruppe 0 gehört. Dieses Verhalten stellt sicher, dass vorhandene Treiber, die KeSetTargetProcessorDpc aufrufen und keine gruppenorientierten Features verwenden, in Multiprozessorsystemen mit zwei oder mehr Gruppen ordnungsgemäß ausgeführt werden. Treiber, die gruppenorientierte Features in Windows 7 und höheren Versionen des Windows-Betriebssystems verwenden, sollten jedoch KeSetTargetProcessorDpcEx anstelle von KeSetTargetProcessorDpc aufrufen.
Ein Aufruf von KeSetTargetProcessorDpcEx , der erfolgt, nachdem ein DPC-Objekt in die Warteschlange gestellt wurde, hat keine Auswirkungen auf die Auswahl eines Prozessors für die Ausführung der DPC-Routine. Um die Auswahl des Zielprozessors zu steuern, muss ein KeSetTargetProcessorDpcEx-Aufruf vor dem Aufruf von KeInsertQueueDpc oder IoRequestDpc erfolgen, der das DPC-Objekt in die Warteschlange stellt.
Weitere Informationen zu DPC-Warteschlangen finden Sie unter Organisation von DPC-Warteschlangen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows 7. |
Zielplattform | Universell |
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Beliebige Ebene |