IO_WORKITEM_ROUTINE_EX Rückruffunktion (wdm.h)
Eine WorkItemEx-Routine führt die Verarbeitung für ein Arbeitselement aus, das von der IoQueueWorkItemEx - oder IoTryQueueWorkItem-Routine in die Warteschlange gestellt wurde.
Syntax
IO_WORKITEM_ROUTINE_EX IoWorkitemRoutineEx;
void IoWorkitemRoutineEx(
[in] PVOID IoObject,
[in, optional] PVOID Context,
[in] PIO_WORKITEM IoWorkItem
)
{...}
Parameter
[in] IoObject
Zeiger auf das Treiberobjekt des Aufrufers oder auf eines der Geräteobjekte des Aufrufers. Dies ist der Zeiger, der als DeviceObject-Parameter an IoAllocateWorkItem übergeben wurde, als das Arbeitselement zugewiesen wurde, oder als IoObject-Parameter zu IoInitializeWorkItem oder IoTryQueueWorkItem , wenn das Arbeitselement initialisiert wurde.
[in, optional] Context
Gibt treiberspezifische Kontextinformationen an. Dies ist der Wert, der als Context-Parameter an IoQueueWorkItemEx oder IoTryQueueWorkItem übergeben wurde, als das Arbeitselement in die Warteschlange gestellt wurde.
[in] IoWorkItem
Zeiger auf die IO_WORKITEM-Struktur für das Arbeitselement. Dies ist der Zeiger, der als IoWorkItem-Parameter an IoQueueWorkItemEx oder IoTryQueueWorkItem übergeben wurde.
Rückgabewert
Keine
Bemerkungen
Treiber können WorkItemEx-Routinen nur unter Windows Vista und höheren Versionen von Windows implementieren.
Der Treiber stellt eine WorkItemEx-Routine in die Warteschlange, indem er IoQueueWorkItemEx oder IoTryQueueWorkItem aufruft, und ein Systemarbeitsthread führt anschließend die Routine aus. Weitere Informationen finden Sie unter System Workerthreads.
Eine WorkItemEx-Routine muss für einen begrenzten Zeitraum ausgeführt werden. Andernfalls kann das System einen Deadlock ausführen. Weitere Informationen finden Sie unter System Workerthreads.
Eine WorkItemEx-Routine wird unter IRQL = PASSIVE_LEVEL und in einem Systemthreadkontext ausgeführt.
Beispiele
Um eine WorkItemEx-Rückrufroutine zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der Rückrufroutine identifiziert, die Sie definieren. Windows bietet eine Reihe von Rückruffunktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Voraussetzung für das Schreiben von Treibern für das Windows-Betriebssystem.
Um beispielsweise eine WorkItemEx-Rückrufroutine mit dem Namen MyWorkItemEx
zu definieren, verwenden Sie den typ IO_WORKITEM_ROUTINE_EX, wie in diesem Codebeispiel gezeigt:
IO_WORKITEM_ROUTINE_EX MyWorkItemEx;
Implementieren Sie dann Ihre Rückrufroutine wie folgt:
_Use_decl_annotations_
VOID
MyWorkItemEx(
PVOID IoObject,
PVOID Context,
PIO_WORKITEM IoWorkItem
)
{
// Function body
}
Der IO_WORKITEM_ROUTINE_EX Funktionstyp ist in der Wdm.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie die _Use_decl_annotations_
Anmerkung ihrer Funktionsdefinition hinzu. Die _Use_decl_annotations_
Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den IO_WORKITEM_ROUTINE_EX Funktionstyp in der Headerdatei angewendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für WDM-Treiber. Informationen zu _Use_decl_annotations_
finden Sie unter Verhalten von Funktionen mit Anmerkungen.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Desktop |
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Wird unter PASSIVE_LEVEL aufgerufen. |