Funzione IoCreateNotificationEvent (wdm.h)

La routine IoCreateNotificationEvent crea o apre un evento di notifica denominato usato per notificare uno o più thread di esecuzione che si è verificato un evento.

Sintassi

PKEVENT IoCreateNotificationEvent(
  [in]  PUNICODE_STRING EventName,
  [out] PHANDLE         EventHandle
);

Parametri

[in] EventName

Puntatore a un buffer contenente una stringa Unicode con terminazione null che denomina l'evento.

[out] EventHandle

Puntatore a una posizione in cui restituire un handle del kernel per l'oggetto evento.

Valore restituito

IoCreateNotificationEvent restituisce un puntatore all'oggetto evento creato o aperto o NULL se l'oggetto evento non è stato possibile creare o aprire.

Commenti

Se l'oggetto evento non esiste già, IoCreateNotificationEvent crea e lo apre e imposta lo stato su Signaled.

Se l'oggetto evento esiste già, IoCreateNotificationEvent apre solo l'oggetto evento.

Gli eventi di notifica e gli eventi di sincronizzazione vengono usati per coordinare l'esecuzione. Tuttavia, mentre un evento di sincronizzazione viene reimpostato, un evento di notifica rimane nello stato segnalato fino a quando il driver chiama KeClearEvent o KeResetEvent.

Per sincronizzare un evento di notifica:

  1. Aprire l'evento di notifica con IoCreateNotificationEvent. Identificare l'evento con la stringa EventName .
  2. Attendere che l'evento venga segnalato chiamando KeWaitForSingleObject con PKEVENT restituito da IoCreateNotificationEvent. Più di un thread di esecuzione può attendere un determinato evento di notifica. Per eseguire il polling invece di stallo, specificare un timeout pari a zero su KeWaitForSingleObject.
  3. Chiudere l'handle all'evento di notifica con ZwClose quando l'accesso all'evento non è più necessario.

Esistono due metodi principali per la condivisione di oggetti evento:

  • L'applicazione in modalità utente crea l'oggetto evento e passa un handle all'oggetto al driver inviando un IOCTL al driver. Il driver deve gestire IOCTL nel contesto del processo che ha creato l'oggetto evento e deve convalidare l'handle chiamando ObReferenceObjectByHandle. Questo metodo è il metodo consigliato per la condivisione di oggetti evento tra le modalità utente e kernel.

  • Il driver crea un oggetto evento denominato nella directory dell'oggetto globale \BaseNamedObjects . Per accedere a un evento in modalità kernel dalla modalità utente, usare il nome Global\\Xxx. Si noti che le impostazioni di sicurezza possono impedire a un'applicazione di aprire l'evento. La \\BaseNamedObjects directory dell'oggetto non viene creata finché il sottosistema Microsoft Win32 inizializza, in modo che i driver caricati al momento dell'avvio \\BaseNamedObjects non possano creare oggetti evento nella directory nelle routine DriverEntry .

Per altre informazioni sugli eventi, vedere Oggetti eventi.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDDIs(storport), IrqlIoPassive4(wdm)

Vedi anche

IoCreateSynchronizationEvent

KeClearEvent

KeResetEvent

KeSetEvent

KeWaitForSingleObject

RtlInitUnicodeString

ZwClose