Fonction ExInitializeWorkItem (wdm.h)
ExInitializeWorkItem initialise un élément de file d’attente de travail avec un contexte fourni par l’appelant et une routine de rappel à mettre en file d’attente pour l’exécution lorsqu’un thread de travail système reçoit le contrôle.
Avertissement
Utilisez cette routine avec une extrême prudence. Consultez la section Remarques ci-dessous.
Syntaxe
void ExInitializeWorkItem(
[in] PWORK_QUEUE_ITEM Item,
[in] PWORKER_THREAD_ROUTINE Routine,
[in] PVOID Context
);
Paramètres
[in] Item
Pointeur vers une structure de WORK_QUEUE_ITEM allouée par l’appelant à initialiser. Cette structure doit être allouée à partir d’un pool non paginé. La routine de rappel spécifiée dans le paramètre Routine est chargée de libérer cet élément de travail lorsqu’il n’est plus nécessaire en appelant ExFreePool ou ExFreePoolWithTag.
[in] Routine
Pointeur vers une routine définie par l’appelant qui sera appelée pour traiter l’élément de travail. Cette routine sera appelée dans le contexte d’un thread système au PASSIVE_LEVEL IRQL. Cette routine est déclarée comme suit :
VOID
(*PWORKER_THREAD_ROUTINE)(
IN PVOID Parameter
);
Paramètre
Pointeur d’informations de contexte qui a été passé dans le paramètre Context .
[in] Context
Pointeur vers les informations de contexte fournies par l’appelant à passer à la routine de rappel spécifiée dans le paramètre Routine .
Valeur de retour
None
Remarques
ExInitializeWorkItem initialise l’élément de travail avec la routine de rappel et le pointeur de contexte et les pointeurs de liste NULL spécifiés.
Pour ajouter l’élément de travail à une file d’attente de travail système, appelez ExQueueWorkItem.
Les éléments de travail sont une ressource limitée et les pilotes ne doivent les allouer qu’en fonction des besoins. Par exemple, n’allouez pas d’élément de travail dans DriverEntry pour l’utilisation dédiée du pilote.
ExInitializeWorkItem et ExQueueWorkItem ne peuvent être utilisés que dans les cas où l’élément de travail spécifié n’est pas associé à un objet d’appareil ou à une pile d’appareils. Dans tous les autres cas, les pilotes doivent utiliser IoAllocateWorkItem, IoFreeWorkItem et IoQueueWorkItem, car seules ces routines garantissent que l’objet d’appareil associé à l’élément de travail spécifié reste disponible jusqu’à ce que l’élément de travail ait été traité.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | wdm.h (include FltKernel.h, Ntifs.h, Ntddk.h, Wdm.h) |
IRQL | N’importe quel niveau |