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, KeWaitForMutexObjectou KeWaitForSingleObject. Para obter mais informações, consulte a seção Comentários a seguir.

Valor de retorno

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

Observações

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 máximo de esperas possível no objeto de evento. O evento permanece sinalizado até que uma chamada para KeClearEvent ou KeResetEvent a limpe. Se o evento for um evento de sincronização, uma espera será atendida antes que o sistema limpe automaticamente o evento.

A rotina de keSetEvent pode aumentar 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 = VERDADEIRO, a rotina retornará sem reduzir o IRQL. Nesse caso, a chamada keSetEvent deve ser seguida imediatamente por uma chamada KeWaitxxx. Ao configurar Espera = 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 estiver entre as chamadas para KeSetEvent e KeWaitXxx.

Para obter mais informações sobre objetos de evento, consulte Event Objects.

Se de Espera estiver definida como FALSE, o chamador poderá ser executado em IRQL <= DISPATCH_LEVEL. Caso contrário, os chamadores de KeSetEvent deverão estar em execução no IRQL <= APC_LEVEL e em um contexto de thread não secundário.

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows 2000.
da Plataforma de Destino Universal
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL Consulte a seção Comentários.
regras de conformidade de DDI CompletionEventChecking(wdm), DoubleKeSetEvent(storport), HwStorPortProhibitedDIs(storport), IoAllocateIrpSignalEventInCompletion(wdm), IoBuildDeviceIoControlSetEvent(wdm), IoBuildFsdIrpSignalEventInCompletion(wdm), IrqlKeSetEvent(wdm), SignalEventInCompletion(wdm)

Consulte também

KeClearEvent

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject

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