Freigeben über


ExInitializeWorkItem-Funktion (wdm.h)

ExInitializeWorkItem initialisiert ein Arbeitswarteschlangenelement mit einer vom Aufrufer bereitgestellten Kontext- und Rückrufroutine, die für die Ausführung in die Warteschlange gestellt werden soll, wenn ein Systemarbeitsthread einem Steuerelement zugewiesen wird.

Warnung

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

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 nicht seitengebundenen Pools zugeordnet werden. Die im Parameter Routine Parameter angegebene Rückrufroutine ist für das Freigeben dieser Arbeitsaufgabe verantwortlich, wenn sie nicht mehr benötigt wird, indem ExFreePool oder ExFreePoolWithTag-aufgerufen wird.

[in] Routine

Zeigen Sie auf eine aufruferdefinierte Routine, die aufgerufen wird, um die Arbeitsaufgabe 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

Kontextinformationspunkt, der im parameter Context übergeben wurde.

[in] Context

Zeiger auf vom Aufrufer bereitgestellte Kontextinformationen, die an die rückrufroutine übergeben werden sollen, die im parameter Routine angegeben ist.

Rückgabewert

Nichts

Bemerkungen

ExInitializeWorkItem initialisiert die Arbeitsaufgabe mit der angegebenen Rückrufroutine und dem Kontextzeiger und NULL Listenzeiger.

Rufen Sie ExQueueWorkItem-auf, um die Arbeitsaufgabe einer Systemarbeitswarteschlange hinzuzufügen.

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

ExInitializeWorkItem- und ExQueueWorkItem- können nur verwendet werden, wenn die angegebene Arbeitsaufgabe 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 bis zur Verarbeitung der Arbeitsaufgabe verfügbar bleibt.

Anforderungen

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

Siehe auch

ExFreePool-

ExFreePoolWithTag-

ExQueueWorkItem-

IoAllocateWorkItem-

IoFreeWorkItem-

IoQueueWorkItem-

WORK_QUEUE_ITEM