Compartilhar via


Função KeSetEvent (wdm.h)

A rotina KeSetEvent define um objeto de evento como um estado sinalizado se o evento ainda não tiver sido sinalizado e retornará o estado anterior do objeto de evento.

Sintaxe

LONG KeSetEvent(
  [in, out] PRKEVENT  Event,
  [in]      KPRIORITY Increment,
  [in]      BOOLEAN   Wait
);

Parâmetros

[in, out] Event

Um ponteiro para um objeto de evento inicializado para o qual o chamador fornece o armazenamento.

[in] Increment

Especifica o incremento de prioridade a ser aplicado se a configuração do evento fizer com que uma espera seja atendida.

[in] Wait

Especifica se a chamada para KeSetEvent deve ser seguida imediatamente por uma chamada para uma das rotinas KeWaitXxx . Se TRUE, a chamada KeSetEvent deverá ser seguida por uma chamada para KeWaitForMultipleObjects, KeWaitForMutexObject ou KeWaitForSingleObject. Para obter mais informações, consulte a seção Comentários a seguir.

Retornar valor

Se o estado anterior do objeto de evento tiver sido sinalizado, um valor diferente de zero será retornado.

Comentários

Chamar KeSetEvent faz com que o evento atinja um estado sinalizado. Se o evento for um evento de notificação, o sistema tentará satisfazer o maior número possível de esperas no objeto de evento. O evento permanece sinalizado até que uma chamada para KeClearEvent ou KeResetEvent o limpe. Se o evento for um evento de sincronização, uma espera será atendida antes que o sistema limpe automaticamente o evento.

A rotina KeSetEvent pode gerar temporariamente o IRQL. Se o parâmetro Wait for FALSE, a rotina, antes de retornar, restaurará o IRQL para o valor original que ele tinha no início da chamada.

Se Wait = TRUE, a rotina retornará sem reduzir o IRQL. Nesse caso, a chamada keSetEvent deve ser imediatamente seguida por uma chamada KeWaitXxx . Ao definir Wait = TRUE, o chamador pode impedir que uma opção de contexto desnecessária ocorra entre a chamada KeSetEvent e a chamada KeWaitXxx . A rotina KeWaitXxx , antes de retornar, restaura o IRQL para seu valor original no início da chamada KeSetEvent . Embora o IRQL desabilite as opções de contexto entre as duas chamadas, essas chamadas não podem ser usadas de forma confiável como o início e o fim de uma operação atômica. Por exemplo, entre essas duas chamadas, um thread que está em execução ao mesmo tempo em outro processador pode alterar o estado do objeto de evento ou do destino da espera.

Um thread paginável ou uma rotina de driver paginável que é executado em IRQL = PASSIVE_LEVEL nunca deve chamar KeSetEvent com o parâmetro Wait definido como TRUE. Essa chamada causará uma falha fatal na página se o chamador for paginado entre as chamadas para KeSetEvent e KeWaitXxx.

Para obter mais informações sobre objetos de evento, consulte Objetos de Evento.

Se Wait estiver definido como FALSE, o chamador poderá estar em execução em IRQL <= DISPATCH_LEVEL. Caso contrário, os chamadores de KeSetEvent deverão estar em execução em IRQL <= APC_LEVEL e em um contexto de thread nonarbitrary.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Consulte a seção Observações.
Regras de conformidade de DDI CompletionEventChecking(wdm), DoubleKeSetEvent(storport), HwStorPortProhibitedDIs(storport), IoAllocateIrpSignalEventInCompletion(wdm), IoBuildDeviceIoControlSetEvent(wdm), IoBuildFsdIrpSignalEventInCompletion(wdm), IrqlKeSetEvent(wdm), SignalEventInCompletion(wdm)

Confira também

KeClearEvent

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject

Especificando aumentos de prioridade ao concluir solicitações de E/S