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 |