Freigeben über


KePulseEvent-Funktion (ntddk.h)

Die KePulseEvent-Routine legt ein Ereignisobjekt atomar auf einen Signalzustand fest, versucht, so viele Wartezeiten wie möglich zu erfüllen, und setzt dann das Ereignisobjekt auf einen nicht signalierten Zustand zurück.

Syntax

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

Parameter

[in, out] Event

Ein Zeiger auf ein Verteilerobjekt vom Typ KEVENT.

[in] Increment

Gibt einen Boost an, der auf die Priorität von Threads angewendet werden soll, die als Ergebnis des Pulsierens des Ereignisses angegeben werden. In der Regel auf 0 festgelegt, kann aber auf 1 festgelegt werden.

[in] Wait

Gibt einen booleschen Wert an, der angibt, ob dem Aufruf von KePulseEvent sofort ein Aufruf einer der KeWaitXxx-Routinen folgt. Wenn TRUE, folgt auf den KePulseEvent-Aufruf unmittelbar ein Aufruf von KeWaitForMultipleObjects, KeWaitForMutexObject oder KeWaitForSingleObject. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Rückgabewert

Der vorherige Signalzustand des Ereignisobjekts.

Hinweise

Weitere Informationen zu Ereignisobjekten finden Sie unter Ereignisobjekte.

Die KePulseEvent-Routine kann die IRQL vorübergehend auslösen. Wenn der Wait-ParameterFALSE ist, stellt die Routine, bevor sie zurückgibt, den IRQL auf den ursprünglichen Wert zurück, den sie zu Beginn des Aufrufs hatte.

Wenn Wait = TRUE, gibt die Routine zurück, ohne die IRQL zu senken. In diesem Fall muss dem KePulseEvent-Aufruf unmittelbar ein KeWaitXxx-Aufruf folgen. Durch Festlegen von Wait = TRUE kann der Aufrufer verhindern, dass zwischen dem KePulseEvent-Aufruf und dem KeWaitXxx-Aufruf ein unnötiger Kontextwechsel auftritt. Die KeWaitXxx-Routine stellt den IRQL am Anfang des KePulseEvent-Aufrufs wieder auf seinen ursprünglichen Wert zurück. Obwohl die IRQL Kontextwechsel zwischen den beiden Aufrufen deaktiviert, können diese Aufrufe nicht zuverlässig als Start und Ende eines atomischen Vorgangs verwendet werden. Zwischen diesen beiden Aufrufen kann z. B. ein Thread, der gleichzeitig auf einem anderen Prozessor ausgeführt wird, den Zustand des Ereignisobjekts oder des Ziels des Wartevorgangs ändern.

Wenn der Aufrufer unter IRQL = DISPATCH_LEVEL oder in einem beliebigen Threadkontext ausgeführt wird, muss der Timeout-Parameter für KeWaitXxx null sein.

Warnung

Wenn ein Thread, der auf Event wartet, derzeit einen Kernel-APC ausführt, wird beim Aufrufen von KePulseEvent die Wartezeit dieses Threads nicht erfüllt. Nach Abschluss des Kernel-APC verbleibt der Thread im Wartezustand.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header ntddk.h (include Ntddk.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

Weitere Informationen

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeSetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject