Partager via


ExInitializeWorkItem, fonction (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 un contrôle.

Avertissement

Utilisez cette routine avec une prudence extrême. 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 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 transmis 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

Aucun

Remarques

ExInitializeWorkItem initialise l’élément de travail avec la routine de rappel et le pointeur de contexte spécifiés et pointeurs de liste NULL.

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 que si nécessaire. Par exemple, n’allouez pas d’élément de travail dans driverEntry pour l’utilisation dédiée du pilote.

ExInitializeWorkItem et ExQueueWorkItem ne peut être utilisé que dans les cas où l’élément de travail spécifié n’est associé à aucun objet ou pile d’appareils d’appareil. Dans tous les autres cas, les pilotes doivent utiliser IoAllocateWorkItem, IoFreeWorkItemet 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é.

Exigences

Exigence Valeur
plateforme cible Bureau
d’en-tête wdm.h (include FltKernel.h, Ntifs.h, Ntddk.h, Wdm.h)
IRQL N’importe quel niveau

Voir aussi

ExFreePool

exFreePoolWithTag

ExQueueWorkItem

IoAllocateWorkItem

IoFreeWorkItem

IoQueueWorkItem

WORK_QUEUE_ITEM