Funzione KeSetEvent (wdm.h)
La routine KeSetEvent imposta un oggetto evento su uno stato segnalato se l'evento non è già stato segnalato e restituisce lo stato precedente dell'oggetto evento.
Sintassi
LONG KeSetEvent(
[in, out] PRKEVENT Event,
[in] KPRIORITY Increment,
[in] BOOLEAN Wait
);
Parametri
[in, out] Event
Puntatore a un oggetto evento inizializzato per il quale il chiamante fornisce l'archiviazione.
[in] Increment
Specifica l'incremento di priorità da applicare se l'impostazione dell'evento causa un'attesa per essere soddisfatta.
[in] Wait
Specifica se la chiamata a KeSetEvent deve essere seguita immediatamente da una chiamata a una delle routine KeWaitXxx . Se TRUE, la chiamata KeSetEvent deve essere seguita da una chiamata a KeWaitForMultipleObjects, KeWaitForMutexObject o KeWaitForSingleObject. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.
Valore restituito
Se lo stato precedente dell'oggetto evento è stato segnalato, viene restituito un valore diverso da zero.
Commenti
La chiamata a KeSetEvent fa sì che l'evento raggiunga uno stato segnalato. Se l'evento è un evento di notifica, il sistema tenta di soddisfare il maggior numero possibile di attese sull'oggetto evento. L'evento rimane segnalato fino a quando non viene cancellata una chiamata a KeClearEvent o KeResetEvent . Se l'evento è un evento di sincronizzazione, un'attesa viene soddisfatta prima che il sistema cancella automaticamente l'evento.
La routine KeSetEvent potrebbe generare temporaneamente irQL. Se il parametro Wait è FALSE, la routine, prima che venga restituita, ripristina irQL sul valore originale che aveva all'inizio della chiamata.
Se WaitTRUE, la routine restituisce = senza abbassare il valore IRQL. In questo caso, la chiamata KeSetEvent deve essere immediatamente seguita da una chiamata KeWaitXxx . Impostando Wait = TRUE, il chiamante può impedire che si verifichi un cambio di contesto non necessario tra la chiamata KeSetEvent e la chiamata KeWaitXxx . La routine KeWaitXxx , prima di restituire, ripristina il valore originale di IRQL all'inizio della chiamata KeSetEvent . Anche se IRQL disabilita i commutatori di contesto tra le due chiamate, queste chiamate non possono essere usate in modo affidabile come inizio e fine di un'operazione atomica. Ad esempio, tra queste due chiamate, un thread in esecuzione contemporaneamente in un altro processore potrebbe modificare lo stato dell'oggetto evento o della destinazione dell'attesa.
Una routine di driver di paging o thread eseguibile da paging eseguita in IRQL = PASSIVE_LEVEL non deve mai chiamare KeSetEvent con il parametro Wait impostato su TRUE. Tale chiamata causa un errore di pagina irreversibile se il chiamante viene eseguito il paging tra le chiamate a KeSetEvent e KeWaitXxx.
Per altre informazioni sugli oggetti evento, vedere Oggetti evento.
Se Wait è impostato su FALSE, il chiamante può essere in esecuzione in IRQL <= DISPATCH_LEVEL. In caso contrario, i chiamanti di KeSetEvent devono essere in esecuzione in IRQL <= APC_LEVEL e in un contesto di thread non arbiverso.
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 | Vedere la sezione Osservazioni. |
Regole di conformità DDI | CompletionEventChecking(wdm), DoubleKeSetEvent(storport), HwStorPortProhibitedDDIs(storport), IoAllocateIrpSignalEventInCompletion(wdm), IoBuildDeviceIoControlSetEvent(wdm), IoBuildFsdIrpSignalEventInCompletion(wdm), IrqlKeSetEvent(wdm), SignalEventInCompletion(wdm) |
Vedi anche
Impostazione dei boost di priorità durante il completamento delle richieste di I/O