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
Especificando aumentos de prioridade ao concluir solicitações de E/S