ZwCreateEvent-Funktion (ntifs.h)
Die ZwCreateEvent Routine erstellt ein Ereignisobjekt, legt den Anfangszustand des Ereignisses auf den angegebenen Wert fest und öffnet ein Handle für das Objekt mit dem angegebenen gewünschten Zugriff.
Syntax
NTSYSAPI NTSTATUS ZwCreateEvent(
[out] PHANDLE EventHandle,
[in] ACCESS_MASK DesiredAccess,
[in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
[in] EVENT_TYPE EventType,
[in] BOOLEAN InitialState
);
Parameter
[out] EventHandle
Ein Zeiger auf eine Variable, die das Ereignisobjekthandle empfängt. Das Handle enthält Buchführungsinformationen, z. B. eine Referenzanzahl und einen Sicherheitskontext.
[in] DesiredAccess
Der ACCESS_MASK Wert, der die gewünschten Zugriffstypen für das Ereignisobjekt darstellt. Die folgende Tabelle enthält die ereignisspezifischen ACCESS_MASK Werte.
Wert | Gewünschter Zugriff |
---|---|
EVENT_QUERY_STATE | Fragen Sie den Status des Ereignisobjekts ab. |
EVENT_MODIFY_STATE | Ändern Sie den Status des Ereignisobjekts. |
EVENT_ALL_ACCESS | Alle möglichen Zugriffsrechte für das Ereignisobjekt. |
[in, optional] ObjectAttributes
Ein Zeiger auf die Objektattributestruktur, die vom Aufrufer bereitgestellt wird, der für das angegebene Objekt verwendet werden soll. Zu diesen Attributen gehören beispielsweise die ObjectName- und die SECURITY_DESCRIPTOR. Dieser Parameter wird durch Aufrufen des InitializeObjectAttributes Makros initialisiert.
[in] EventType
Der Typ des Ereignisses, das SynchronizationEvent- oder ein NotificationEvent-sein kann. Diese Werte gehören zur EVENT_TYPE Enumeration, die in der ntdef.h Headerdatei definiert ist.
[in] InitialState
Der Anfangszustand des Ereignisobjekts. Auf TRUE- festgelegt, um das Ereignisobjekt in den Signalzustand zu initialisieren. Legen Sie den Wert auf FALSE fest,, um das Ereignisobjekt in den Zustand "Nicht signalisiert" zu initialisieren.
Rückgabewert
ZwCreateEvent- gibt STATUS_SUCCESS oder einen entsprechenden Fehlerstatus zurück. Mögliche Fehlerstatuscodes sind:
Rückgabecode | Beschreibung |
---|---|
STATUS_INSUFFICIENT_RESOURCES | Ressourcen, die von dieser Funktion benötigt werden, konnten nicht zugeordnet werden. |
STATUS_INVALID_PARAMETER | Die angegebene ObjectAttributes- Struktur enthielt einen ungültigen Parameterwert. |
STATUS_INVALID_PARAMETER_4 | Der angegebene EventType Parameter war ungültig. |
STATUS_OBJECT_NAME_INVALID | Der ObjectAttributes- Parameter enthielt eine ObjectName- in der ungültigen OBJECT_ATTRIBUTES Struktur. |
STATUS_OBJECT_PATH_SYNTAX_BAD | Der ObjectAttributes--Parameter enthielt kein RootDirectory-element, aber das ObjectName-Element in der OBJECT_ATTRIBUTES-Struktur war eine leere Zeichenfolge oder enthielt kein OBJECT_NAME_PATH_SEPARATOR Zeichen. Dies gibt eine falsche Syntax für den Objektpfad an. |
STATUS_PRIVILEGE_NOT_HELD | Der Aufrufer verfügte nicht über die erforderlichen Berechtigungen zum Erstellen eines Handles mit dem im parameter DesiredAccess angegebenen Zugriff. |
Bemerkungen
ZwCreateEvent erstellt ein Ereignisobjekt, legt den Anfangszustand auf den angegebenen Wert fest und öffnet ein Handle für das Objekt mit dem angegebenen gewünschten Zugriff.
Ereignisse werden verwendet, um die Ausführung zu koordinieren. Ereignisse können von Dateisystemtreibern verwendet werden, um es einem Aufrufer zu ermöglichen, auf den Abschluss des angeforderten Vorgangs zu warten, bis das angegebene Ereignis auf den Zustand "Signaled" festgelegt ist.
ZwCreateEvent- kann Benachrichtigungs- oder Synchronisierungsereignisse erstellen:
- Benachrichtigungsereignisse können verwendet werden, um einen oder mehrere Threads der Ausführung zu benachrichtigen, dass ein Ereignis aufgetreten ist.
- Synchronisierungsereignisse können bei der Serialisierung des Zugriffs auf Hardware zwischen zwei anderen nicht verknüpften Treibern verwendet werden.
Ein Synchronisierungsereignis wird automatisch zurückgesetzt. Wenn ein Synchronisierungsereignis auf den Signalstatus festgelegt ist, wird ein einzelner Ausführungsthread, der darauf wartet, dass das Ereignis losgelassen wird, und das Ereignis wird automatisch auf den Not-Signaled Zustand zurückgesetzt.
Im Gegensatz zu einem Synchronisierungsereignis wird ein Benachrichtigungsereignis nicht automatisch zurückgesetzt. Sobald sich ein Benachrichtigungsereignis im Zustand "Signaled" befindet, verbleibt es in diesem Zustand, bis es explizit zurückgesetzt wird.
So synchronisieren Sie ein Benachrichtigungsereignis:
Erstellen Sie das Benachrichtigungsereignis mit ZwCreateEvent-, wobei der parameter EventType auf NotificationEvent-festgelegt ist.
Warten Sie, bis das Ereignis signalisiert wird, indem Sie ZwWaitForSingleObject- mit der EventHandle- aufrufen, die von ZwCreateEventzurückgegeben wird. Mehrere Thread der Ausführung können warten, bis ein bestimmtes Benachrichtigungsereignis signalisiert wird. Geben Sie zum Abfragen anstelle von "Sperre" eine Timeout- null an, um ZwWaitForSingleObject-.
Schließen Sie das Handle mit ZwClose-, wenn der Zugriff auf das Ereignis nicht mehr erforderlich ist.
Die ZwCreateEvent--Funktion wird aufgerufen, nachdem das InitializeObjectAttributes Makros verwendet wird, um Attribute in der OBJECT_ATTRIBUTES Struktur für das Objekt festzulegen.
Es gibt zwei alternative Methoden zum Angeben des Namens des Objekts, das an ZwCreateEventübergeben wird:
Als vollqualifizierter Pfadname, angegeben im ObjectName Member der Eingabe ObjectAttributes.
Als Pfadname relativ zum Verzeichnis, das durch das Handle im RootDirectory Member der Eingabe ObjectAttributesdargestellt wird.
Um das Ereignis freizugeben, ruft ein Treiber ZwClose- mit dem Ereignishandle auf.
Weitere Informationen zu Ereignissen finden Sie unter Ereignisobjekte.
Anmerkung
Wenn der Aufruf der ZwCreateEvent Routine im Benutzermodus auftritt, sollten Sie den Namen "NtCreateEvent" anstelle von "ZwCreateEvent" verwenden.
Bei Aufrufen von Kernelmodustreibern können sich die NtXxx und ZwXxx- Versionen einer Windows Native System Services-Routine anders verhalten, wie sie Eingabeparameter behandeln und interpretieren. Weitere Informationen zur Beziehung zwischen den NtXxx und ZwXxx- Versionen einer Routine finden Sie unter Using Nt and Zw Versions of the Native System Services Routines.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows XP. |
Zielplattform- | Universal |
Header- | ntifs.h (einschließlich Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | PASSIVE_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm) |
Siehe auch
Verwenden von Nt- und Zw-Versionen der systemeigenen Systemdienste-Routinen