KeInsertQueue, fonction (ntifs.h)

La routine KeInsertQueue insère une entrée à la fin de la file d’attente donnée si elle ne peut pas utiliser immédiatement l’entrée pour satisfaire une attente de thread.

Syntaxe

LONG KeInsertQueue(
  [in, out] PRKQUEUE    Queue,
  [in, out] PLIST_ENTRY Entry
);

Paramètres

[in, out] Queue

Pointeur vers un objet file d’attente initialisé pour lequel l’appelant fournit un stockage résident dans un pool non paginé.

[in, out] Entry

Pointeur vers une entrée à mettre en file d’attente. Ce pointeur doit être une adresse d’espace système résidente.

Valeur retournée

KeInsertQueue retourne l’état de signal précédent de la file d’attente donnée. S’il a été défini sur zéro (autrement dit, non signalé) avant l’appel de KeInsertQueue , KeInsertQueue retourne zéro, ce qui signifie qu’aucune entrée n’a été mise en file d’attente. S’il était différent de zéro (signalé), KeInsertQueue retourne le nombre d’entrées qui ont été mises en file d’attente avant l’appel de KeInsertQueue .

Remarques

Les entrées à mettre en file d’attente par KeInsertQueue doivent être allouées à partir d’un pool non paginé. Par exemple, la mémoire pour les entrées définies par l’appelant peut être allouée avec ExAllocatePoolWithTag. Si l’appelant alloue des entrées d’une taille fixe, la création d’une liste de lookaside avec ExInitializeNPagedLookasideList et l’allocation à partir de celle-ci avec ExAllocateFromNPagedLookasideList est plus efficace que d’effectuer des appels fréquents à ExAllocatePoolWithTag, en particulier pour les entrées dont la taille n’est pas un multiple de PAGE_SIZE.

Si des threads sont en attente sur l’objet file d’attente lorsque KeInsertQueue est appelé, l’attente d’un thread unique est satisfaite par cet appel. Le thread est distribué pour l’exécution avec le pointeur Entry donné.

Si aucun thread n’est actuellement en attente sur l’objet file d’attente lorsque KeInsertQueue est appelé, l’entrée donnée est insérée dans la file d’attente et l’état du signal de l’objet file d’attente est incrémenté.

Pour plus d’informations sur l’utilisation de files d’attente internes gérées par le pilote, consultez Files d’attente gérées par le pilote.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête ntifs.h (include Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport)

Voir aussi

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertHeadQueue

KeRemoveQueue