Freigeben über


KeInitializeEvent-Funktion (wdm.h)

Die KeInitializeEvent-Routine initialisiert ein Ereignisobjekt als Synchronisierungsereignis (einzelner Waiter) oder Benachrichtigungstyp und legt es auf einen signalisierten oder nicht signalisierten Zustand fest.

Syntax

void KeInitializeEvent(
  [out] PRKEVENT   Event,
  [in]  EVENT_TYPE Type,
  [in]  BOOLEAN    State
);

Parameter

[out] Event

Zeiger auf ein Ereignisobjekt, für das der Aufrufer den Speicher bereitstellt.

[in] Type

Gibt den Ereignistyp an, entweder NotificationEvent oder SynchronizationEvent.

[in] State

Gibt den Anfangszustand des Ereignisses an. TRUE gibt einen signalisierenden Zustand an.

Rückgabewert

Keine

Bemerkungen

Der Speicher für ein Ereignisobjekt muss resident sein: in der Geräteerweiterung eines vom Treiber erstellten Geräteobjekts, in der Controllererweiterung eines vom Treiber erstellten Controllerobjekts oder in einem vom Aufrufer zugewiesenen Pool ohne Auslagerung. Wenn Sie das Ereignis im Stapel zuordnen, müssen Sie beim Aufrufen von KeWaitForSingleObject, KeWaitForMutexObject oder KeWaitForMultipleObject einen KernelMode-Wartevorgang angeben. Während einer KernelMode-Wartezeit wird der Stapel, der das Ereignis enthält, nicht ausgelagert.

Treiber verwenden in der Regel ein NotificationEvent , um auf den Abschluss eines E/A-Vorgangs zu warten. Wenn ein Benachrichtigungsereignis auf den signalierten Zustand festgelegt ist, sind alle Threads, die darauf gewartet haben, dass das Ereignis auf den signalierten Zustand festgelegt wurde, für die Ausführung geeignet. Das Ereignis verbleibt im signalierten Zustand, bis ein Thread KeResetEvent oder KeClearEvent aufruft, um das Ereignis im nicht signalierten Zustand festzulegen.

Ein SynchronizationEvent wird auch als Autoreset- oder AutoClearing-Ereignis bezeichnet. Wenn ein solches Ereignis festgelegt wird, kann ein einzelner wartenden Thread ausgeführt werden. Der Kernel setzt das Ereignis automatisch auf den Nicht-Signal-Zustand zurück, wenn eine Wartezeit erfüllt ist. Ein Treiber kann ein Synchronisierungsereignis verwenden, um eine freigegebene Ressource zu schützen, die zum Synchronisieren der Vorgänge mehrerer Threads verwendet wird.

Weitere Informationen zu Ereignisobjekten finden Sie unter Ereignisobjekte.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Beliebige Ebene
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IoAllocateIrpSignalEventInCompletion(wdm), IoAllocateIrpSignalEventInCompletion2(wdm), IoAllocateIrpSignalEventInCompletion3(wdm), IoAllocateIrpSignalEventInCompletionTimeout(wdm), IoBuildDeviceControlWait(wdm), IoBuildDeviceControlWaitTimeout(wdm), IoBuildDeviceIoControlSetEvent(wdm), IoBuildFsdIrpSignalEventInCompletion(wdm), IoBuildFsdIrpSignalEventInCompletion2(wdm), IoBuildFsdIrpSignalEventInCompletion3(wdm), IoBuildFsdIrpSignalEventInCompletionTimeout(wdm), IoBuildSynchronousFsdRequestWait(wdm), IoBuildSynchronousFsdRequestWaitTimeout(wdm), PendedCompletedRequest(wdm), PendedCompletedRequestEx(wdm), SignalEventInCompletion(wdm), SignalEventInCompletion2(wdm), SignalEventInCompletion3(wdm), StartDeviceWait(wdm), StartDeviceWait2(wdm)

Weitere Informationen

KeClearEvent

KeReadStateEvent

KeResetEvent

KeSetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject