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