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 MyWorkItemzu 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.

Weitere Informationen

IO_WORKITEM

IoQueueWorkItem