Condividi tramite


Funzione IoCreateNotificationEvent (wdm.h)

La routine IoCreateNotificationEvent crea o apre un evento di notifica denominato utilizzato per notificare a 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 non è stato possibile creare o aprire l'oggetto evento.

Osservazioni

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

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

Sia gli eventi di notifica che 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 finché il driver non chiama KeClearEvent o KeResetEvent.

Per eseguire la sincronizzazione in 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 l'evento PKEVENT restituito da IoCreateNotificationEvent. Più thread di esecuzione possono attendere un determinato evento di notifica. Per eseguire il polling invece di stallo, specificare un di timeout pari a zero per 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 \BaseNamedObjects globale. 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 directory dell'oggetto \\BaseNamedObjects non viene creata fino all'inizializzazione del sottosistema Microsoft Win32, pertanto i driver caricati al momento dell'avvio non possono creare oggetti evento nella directory \\BaseNamedObjects nelle routine DriverEntry.

Per altre informazioni sugli eventi, vedere Oggetti evento.

Fabbisogno

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)

Vedere anche

IoCreateSynchronizationEvent

KeClearEvent

KeResetEvent

KeSetEvent

KeWaitForSingleObject

RtlInitUnicodeString

ZwClose