Freigeben über


IO_WORKITEM_ROUTINE Rückruffunktion (wdm.h)

Eine WorkItem Routine führt die Verarbeitung für eine Arbeitsaufgabe aus, die 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

Zeigen Sie auf eines der Geräteobjekte des Aufrufers. Dies ist der Zeiger, der als DeviceObject Parameter an IoAllocateWorkItem übergeben wurde,, als die Arbeitsaufgabe zugewiesen wurde, oder als IoObject Parameter zum IoInitializeWorkItem, als die Arbeitsaufgabe initialisiert wurde.

[in, optional] Context

Gibt treiberspezifische Kontextinformationen an. Dies ist der Wert, der als Context-Parameter an IoQueueWorkItem übergeben wurde, als die Arbeitsaufgabe in die Warteschlange gestellt wurde.

Rückgabewert

Nichts

Bemerkungen

Der Treiber stellt eine WorkItem Routine in die Warteschlange, indem IoQueueWorkItem-aufgerufen wird und anschließend ein Systemarbeitsthread die Routine ausführt. Eine WorkItem Routine muss für einen begrenzten Zeitraum ausgeführt werden; andernfalls kann das System deadlock. Weitere Informationen finden Sie unter System Worker Threads.

Eine WorkItem--Routine wird bei IRQL = PASSIVE_LEVEL und in einem Systemthreadkontext ausgeführt.

Beispiele

Um eine WorkItem- Rückrufroutine zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine identifiziert. 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.

Wenn Sie beispielsweise eine WorkItem- Rückrufroutine definieren möchten, die MyWorkItembenannt ist, verwenden Sie den IO_WORKITEM_ROUTINE Typ, 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 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 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.

Siehe auch

IO_WORKITEM

IoQueueWorkItem-