IO_WORKITEM_ROUTINE Rückruffunktion (wdm.h)
Eine WorkItem-Routine führt die Verarbeitung für ein Arbeitselement aus, das von der IoQueueWorkItem-Routine in die Warteschlange gestellt wurde.
Syntax
IO_WORKITEM_ROUTINE IoWorkitemRoutine;
void IoWorkitemRoutine(
[in] PDEVICE_OBJECT DeviceObject,
[in, optional] PVOID Context
)
{...}
Parameter
[in] DeviceObject
Zeiger 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 auf IoInitializeWorkItem , als das Arbeitselement initialisiert wurde.
[in, optional] Context
Gibt treiberspezifische Kontextinformationen an. Dies ist der Wert, der als Context-Parameter an IoQueueWorkItem übergeben wurde, als das Arbeitselement in die Warteschlange gestellt wurde.
Rückgabewert
Keine
Bemerkungen
Der Treiber stellt eine WorkItem-Routine in die Warteschlange, indem er IoQueueWorkItem aufruft, und ein Systemarbeitsthread führt die Routine anschließend aus. Eine WorkItem-Routine muss für einen begrenzten Zeitraum ausgeführt werden. andernfalls kann das System deadlocken. Weitere Informationen finden Sie unter System Worker Threads.
Eine WorkItem-Routine wird unter IRQL = PASSIVE_LEVEL und in einem Systemthreadkontext ausgeführt.
Beispiele
Um eine WorkItem-Rückrufroutine zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine identifiziert. 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 Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.
Um beispielsweise eine WorkItem-Rückrufroutine mit dem Namen MyWorkItem
zu definieren, verwenden Sie den typ IO_WORKITEM_ROUTINE, wie in diesem Codebeispiel gezeigt:
IO_WORKITEM_ROUTINE MyWorkItem;
Implementieren Sie dann Ihre Rückrufroutine wie folgt:
_Use_decl_annotations_
VOID
MyWorkItem(
PDEVICE_OBJECT DeviceObject,
PVOID Context
)
{
// Function body
}
Der IO_WORKITEM_ROUTINE 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 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 Annotating Function Behavior.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Desktop |
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Wird bei PASSIVE_LEVEL aufgerufen. |