Fonction KePulseEvent (ntddk.h)

La routine KePulseEvent définit atomiquement un objet d’événement à un état signalé, tente de satisfaire autant d’attentes que possible, puis réinitialise l’objet événement à un état non signalé.

Syntaxe

LONG KePulseEvent(
  [in, out] PRKEVENT  Event,
  [in]      KPRIORITY Increment,
  [in]      BOOLEAN   Wait
);

Paramètres

[in, out] Event

Pointeur vers un objet de répartiteur de type KEVENT.

[in] Increment

Spécifie un boost à appliquer à la priorité des threads qui sont préparés à la suite de la pulsation de l’événement. Généralement défini sur zéro, mais peut être défini sur un.

[in] Wait

Spécifie une valeur booléenne qui indique si l’appel à KePulseEvent sera immédiatement suivi d’un appel à l’une des routines KeWaitXxx . Si la valeur est TRUE, l’appel KePulseEvent est immédiatement suivi d’un appel à KeWaitForMultipleObjects, KeWaitForMutexObject ou KeWaitForSingleObject. Pour plus d'informations, consultez la section Notes qui suit.

Valeur retournée

État du signal précédent de l’objet événement.

Remarques

Pour plus d’informations sur les objets d’événements, consultez Event Objects.

La routine KePulseEvent peut déclencher temporairement l’IRQL. Si le paramètre Wait a la valeur FALSE, la routine, avant qu’elle ne retourne, restaure l’IRQL à la valeur d’origine qu’elle avait au début de l’appel.

Si l’argument Wait = TRUE est attendu, la routine retourne sans abaisser l’IRQL. Dans ce cas, l’appel KePulseEvent doit être immédiatement suivi d’un appel KeWaitXxx . En définissant Wait = TRUE, l’appelant peut empêcher un changement de contexte inutile de se produire entre l’appel KePulseEvent et l’appel KeWaitXxx . La routine KeWaitXxx , avant qu’elle ne retourne, restaure l’IRQL à sa valeur d’origine au début de l’appel KePulseEvent . Bien que l’IRQL désactive les commutateurs de contexte entre les deux appels, ces appels ne peuvent pas être utilisés de manière fiable comme début et fin d’une opération atomique. Par exemple, entre ces deux appels, un thread qui s’exécute en même temps sur un autre processeur peut modifier l’état de l’objet d’événement ou de la cible de l’attente.

Si l’appelant s’exécute à IRQL = DISPATCH_LEVEL ou dans un contexte de thread arbitraire, le paramètre Timeout de KeWaitXxx doit être égal à zéro.

Avertissement

Si un thread en attente d’événement exécute actuellement un APC du noyau, lorsque KePulseEvent est appelé, l’attente de ce thread n’est pas satisfaite. Une fois l’APC du noyau terminé, le thread reste à l’état d’attente.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête ntddk.h (inclure Ntddk.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport),IrqlKeDispatchLte(wdm)

Voir aussi

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeSetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject