Freigeben über


ExInitializeWorkItem-Funktion (wdm.h)

ExInitializeWorkItem initialisiert ein Arbeitswarteschlangenelement mit einem vom Aufrufer bereitgestellten Kontext und einer Rückrufroutine, die zur Ausführung in die Warteschlange eingereiht werden soll, wenn einem Systemarbeitsthread die Steuerung erteilt wird.

Warnung

Verwenden Sie diese Routine mit äußerster Vorsicht. Weitere Informationen finden Sie weiter unten im Abschnitt "Hinweise ".

Syntax

void ExInitializeWorkItem(
  [in] PWORK_QUEUE_ITEM       Item,
  [in] PWORKER_THREAD_ROUTINE Routine,
  [in] PVOID                  Context
);

Parameter

[in] Item

Zeiger auf eine vom Aufrufer zugewiesene WORK_QUEUE_ITEM Struktur, die initialisiert werden soll. Diese Struktur muss aus einem nicht auslagerten Pool zugeordnet werden. Die im Parameter Routine angegebene Rückrufroutine ist dafür verantwortlich, dieses Arbeitselement freizugeben, wenn es durch Aufrufen von ExFreePool oder ExFreePoolWithTag nicht mehr benötigt wird.

[in] Routine

Zeiger auf eine vom Aufrufer definierte Routine, die aufgerufen wird, um das Arbeitselement zu verarbeiten. Diese Routine wird im Kontext eines Systemthreads bei IRQL PASSIVE_LEVEL aufgerufen. Diese Routine wird wie folgt deklariert:

VOID
(*PWORKER_THREAD_ROUTINE)(
    IN PVOID Parameter
    );

Parameter

Kontextinformationszeiger, der im Context-Parameter übergeben wurde.

[in] Context

Zeiger auf vom Aufrufer bereitgestellte Kontextinformationen, die an die im Parameter Routine angegebene Rückrufroutine übergeben werden sollen.

Rückgabewert

Keine

Bemerkungen

ExInitializeWorkItem initialisiert das Arbeitselement mit der angegebenen Rückrufroutine und dem angegebenen Kontextzeiger und NULL-Listenzeiger.

Um das Arbeitselement einer Systemarbeitswarteschlange hinzuzufügen, rufen Sie ExQueueWorkItem auf.

Arbeitselemente sind eine begrenzte Ressource, und Treiber sollten sie nur nach Bedarf zuordnen. Weisen Sie beispielsweise kein Arbeitselement in DriverEntry für die dedizierte Verwendung des Treibers zu.

ExInitializeWorkItem und ExQueueWorkItem können nur in Fällen verwendet werden, in denen das angegebene Arbeitselement keinem Geräteobjekt oder Gerätestapel zugeordnet ist. In allen anderen Fällen sollten Treiber IoAllocateWorkItem, IoFreeWorkItem und IoQueueWorkItem verwenden, da nur diese Routinen sicherstellen, dass das dem angegebenen Arbeitselement zugeordnete Geräteobjekt verfügbar bleibt, bis das Arbeitselement verarbeitet wurde.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile wdm.h (include FltKernel.h, Ntifs.h, Ntddk.h, Wdm.h)
IRQL Beliebige Ebene

Weitere Informationen

ExFreePool

ExFreePoolWithTag

ExQueueWorkItem

IoAllocateWorkItem

IoFreeWorkItem

IoQueueWorkItem

WORK_QUEUE_ITEM