Funzione IoCreateSynchronizationEvent (wdm.h)

La routine IoCreateSynchronizationEvent crea o apre un evento di sincronizzazione denominato da usare nella serializzazione dell'accesso all'hardware tra due driver altrimenti non correlati.

Sintassi

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

Parametri

[in] EventName

Puntatore a un buffer contenente una stringa Unicode con terminazione Null che assegna un nome all'evento.

[out] EventHandle

Puntatore a una posizione in cui restituire un handle per l'oggetto evento. In Windows Server 2003 e versioni successive di Windows, l'handle restituito è un handle del kernel.

Valore restituito

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

Commenti

L'oggetto evento viene creato se non esiste già. IoCreateSynchronizationEvent imposta lo stato di un nuovo evento di sincronizzazione su Signaled. Se l'oggetto evento esiste già, viene semplicemente aperto. Coppia di driver che usano una chiamata di evento di sincronizzazione KeWaitForSingleObject con il puntatore PKEVENT restituito da questa routine.

Quando un evento di sincronizzazione è impostato sullo stato Segnalato, viene rilasciato un singolo thread di esecuzione in attesa del rilascio dell'evento e l'evento viene reimpostato automaticamente sullo stato Not-Signaled.

Per rilasciare l'evento, un driver chiama ZwClose con l'handle dell'evento.

La condivisione di oggetti evento tra la modalità utente e la modalità kernel richiede attenzione. 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 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.

Requisiti

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

Vedi anche

IoCreateNotificationEvent

KeWaitForSingleObject

RtlInitUnicodeString

ZwClose