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.