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 |