Partager via


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

Voir aussi

ExFreePool

ExFreePoolWithTag

ExQueueWorkItem

IoAllocateWorkItem

IoFreeWorkItem

IoQueueWorkItem

WORK_QUEUE_ITEM