Freigeben über


KePulseEvent-Funktion (ntddk.h)

Die KePulseEvent ein Ereignisobjekt atomisch auf einen signalgesteuerten Zustand festlegt, versucht, so viele Wartezeiten wie möglich zu erfüllen, und setzt das Ereignisobjekt dann auf einen nicht signalgesteuerten Zustand zurück.

Syntax

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

Parameter

[in, out] Event

Ein Zeiger auf ein Dispatcherobjekt vom Typ KEVENT.

[in] Increment

Gibt eine Verstärkung an, die auf die Priorität von Threads angewendet werden soll, die als Ergebnis des Pulsings des Ereignisses gelesen werden. In der Regel auf Null festgelegt, kann jedoch auf eine festgelegt werden.

[in] Wait

Gibt einen booleschen Wert an, der angibt, ob der Aufruf von KePulseEvent- sofort durch einen Aufruf eines der KeWait-Xxx- Routinen folgt. Wenn TRUE, folgt der KePulseEvent- Aufruf sofort einem Aufruf von KeWaitForMultipleObjects, KeWaitForMutexObjectoder KeWaitForSingleObject. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Rückgabewert

Der vorherige Signalzustand des Ereignisobjekts.

Bemerkungen

Weitere Informationen zu Ereignisobjekten finden Sie unter Event Objects.

Die KePulseEvent Routine kann die IRQL vorübergehend auslösen. Wenn der parameter WaitFALSEist, stellt die Routine vor der Rückgabe die IRQL auf den ursprünglichen Wert zurück, den er am Anfang des Aufrufs hatte.

Wenn Wait = TRUE, gibt die Routine zurück, ohne die IRQL zu senken. In diesem Fall muss der KePulseEvent Aufruf sofort mit einem KeWaitXxx Anruf gefolgt werden. Durch Festlegen von Wait = TRUEkann der Aufrufer verhindern, dass zwischen dem KePulseEvent Aufruf und dem KeWaitXxx Aufruf ein unnötiger Kontextwechsel auftritt. Die KeWait-Xxx- Routine stellt den IRQL-Wert am Anfang des KePulseEvent- Aufrufs wieder her. 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. Beispielsweise kann zwischen diesen beiden Aufrufen ein Thread, der gleichzeitig auf einem anderen Prozessor ausgeführt wird, den Status des Ereignisobjekts oder des Ziels der Wartezeit ändern.

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

Warnung

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- ntddk.h (include Ntddk.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

Siehe auch

KeInitializeEvent-

KeReadStateEvent-

KeResetEvent

KeSetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject