Freigeben über


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

Weitere Informationen

IO_WORKITEM

IoInitializeWorkItem

IoQueueWorkItemEx

IoTryQueueWorkItem