IO_WORKITEM_ROUTINE_EX Rückruffunktion (wdm.h)
Eine WorkItemEx Routine führt die Verarbeitung für eine Arbeitsaufgabe aus, die 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
Zeigen Sie 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, wenn die Arbeitsaufgabe zugewiesen wurde, oder als IoObject Parameter an IoInitializeWorkItem oder IoTryQueueWorkItem, als die Arbeitsaufgabe initialisiert wurde.
[in, optional] Context
Gibt treiberspezifische Kontextinformationen an. Dies ist der Wert, der als Context-Parameter an IoQueueWorkItemEx oder IoTryQueueWorkItem übergeben wurde, als die Arbeitsaufgabe in die Warteschlange gestellt wurde.
[in] IoWorkItem
Zeigen Sie auf die IO_WORKITEM Struktur für die Arbeitsaufgabe. Dies ist der Zeiger, der als IoWorkItem Parameter an IoQueueWorkItemEx oder IoTryQueueWorkItemübergeben wurde.
Rückgabewert
Nichts
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 IoQueueWorkItemEx oder IoTryQueueWorkItem-aufgerufen wird und anschließend ein Systemarbeitsthread die Routine ausführt. Weitere Informationen finden Sie unter System Worker Threads.
Eine WorkItemEx Routine muss für einen begrenzten Zeitraum ausgeführt werden; andernfalls kann das System deadlock. Weitere Informationen finden Sie unter System Worker Threads.
Eine WorkItemEx Routine wird bei IRQL = PASSIVE_LEVEL und in einem Systemthreadkontext ausgeführt.
Beispiele
Um eine WorkItemEx Rückrufroutine zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der rückrufroutinen identifiziert, die Sie definieren. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.
Um beispielsweise eine WorkItemEx- Rückrufroutine zu definieren, die MyWorkItemEx
heißt, verwenden Sie den IO_WORKITEM_ROUTINE_EX Typ, 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 wird in der Wdm.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die _Use_decl_annotations_
Anmerkung hinzufügen. Die _Use_decl_annotations_
Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp IO_WORKITEM_ROUTINE_EX in der Headerdatei angewendet werden, verwendet 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 Annotating Function Behavior.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Desktop |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL- | Wird bei PASSIVE_LEVEL aufgerufen. |