Condividi tramite


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

KeClearEvent

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject

Impostazione dei boost di priorità durante il completamento delle richieste di I/O