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:
- Aprire l'evento di notifica con IoCreateNotificationEvent. Identificare l'evento con la stringa EventName.
- 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.
- 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 nomeGlobal\\
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) |