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 de 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ésident.
Valeur de retour
KeInsertQueue retourne l’état de signal précédent du File d’attentedonné. S’il a été défini sur zéro (autrement dit, non signalé) avant keInsertQueue a été appelé, 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 mises en file d’attente avant KeInsertQueue a été appelée.
Remarques
Les entrées à mettre en file d’attente par KeInsertQueue doivent être allouées à partir du pool non paginé. Par exemple, la mémoire des 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 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 multiple de PAGE_SIZE.
Si des threads attendent sur l’objet file d’attente lorsque KeInsertQueue est appelé, l’attente d’un seul thread est satisfaite par cet appel. Le thread est distribué pour l’exécution avec le pointeur d’entrée donné.
Si aucun thread n’attend actuellement 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 Driver-Managed files d’attente.
Exigences
Voir aussi
ExAllocateFromNPagedLookasideList