Função KeSetTimerEx (wdm.h)

A rotina KeSetTimerEx define o intervalo absoluto ou relativo no qual um objeto de temporizador deve ser definido como um estado sinalizado, opcionalmente fornece uma rotina CustomTimerDpc a ser executada quando esse intervalo expira e, opcionalmente, fornece um intervalo recorrente para o temporizador.

Sintaxe

BOOLEAN KeSetTimerEx(
  [in, out]      PKTIMER       Timer,
  [in]           LARGE_INTEGER DueTime,
  [in]           LONG          Period,
  [in, optional] PKDPC         Dpc
);

Parâmetros

[in, out] Timer

Ponteiro para um objeto de temporizador que foi inicializado com KeInitializeTimer ou KeInitializeTimerEx.

[in] DueTime

Especifica o tempo absoluto ou relativo em que o temporizador deve expirar. Se o valor do parâmetro DueTime for negativo, o tempo de expiração será relativo à hora atual do sistema. Caso contrário, o tempo de expiração será absoluto. O tempo de expiração é expresso em unidades de tempo do sistema (intervalos de 100 nanossegundos). Os tempos de expiração absolutos acompanham as alterações na hora do sistema; os tempos de expiração relativos não são afetados pelas alterações de tempo do sistema.

[in] Period

Especifica um intervalo recorrente opcional para o temporizador em milissegundos. Deve ser um valor maior ou igual a zero. Se o valor desse parâmetro for zero, o temporizador será um temporizador não periódico que não faz nova fila automaticamente.

[in, optional] Dpc

Ponteiro para um objeto DPC que foi inicializado por KeInitializeDpc. Esse parâmetro é opcional.

Retornar valor

Se o objeto de temporizador já estava na fila do temporizador do sistema, KeSetTimerEx retornará TRUE.

Comentários

A rotina KeSetTimerEx faz o seguinte:

  • Calcula o tempo de expiração.

  • Define o temporizador como um estado não sinalizado.

  • Define o intervalo recorrente para o temporizador, se um tiver sido especificado.

  • Insere o objeto timer na fila do temporizador do sistema.

Se o objeto de temporizador já estiver na fila do temporizador, ele será implicitamente cancelado antes de ser definido como o novo tempo de expiração. Uma chamada para KeSetTimerEx antes do DueTime especificado anteriormente expirou cancela o temporizador e a chamada para o Dpc, se houver, associada à chamada anterior.

Os tempos de expiração são medidos em relação ao relógio do sistema e a precisão com que o sistema operacional pode detectar quando um temporizador expira é limitada pela granularidade do relógio do sistema. Para obter mais informações, consulte Precisão do temporizador.

Se o parâmetro Dpc for especificado, um objeto DPC será associado ao objeto timer. Quando o temporizador expira, o objeto timer é removido da fila do temporizador do sistema e é definido como um estado sinalizado. Se um objeto DPC tiver sido associado ao temporizador quando ele foi definido, o objeto DPC será inserido na fila DPC do sistema a ser executada assim que as condições permitirem após o intervalo do temporizador expirar.

Uma rotina de DPC não pode desalocar um temporizador periódico. Uma rotina de DPC pode desalocar um temporizador não periódico.

Observe que um temporizador periódico é reiniciado automaticamente assim que expira. Assim, em um computador multiprocessador, o DPC para um temporizador periódico pode ser executado em dois processadores simultaneamente.

Apenas uma instanciação de um determinado objeto DPC pode ser enfileirada a qualquer momento. Para evitar possíveis condições de corrida, o DPC passado para KeSetTimerEx não deve ser passado para KeInsertQueueDpc.

Os motoristas devem cancelar todos os temporizadores ativos em suas rotinas de descarregamento . Use KeCancelTimer para cancelar qualquer temporizador.

Para obter mais informações sobre objetos de temporizador, consulte Objetos do Temporizador e DPCs.

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 <= DISPATCH_LEVEL
Regras de conformidade de DDI HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

Confira também

KeCancelTimer

KeInitializeDpc

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeWaitForMultipleObjects

KeWaitForSingleObject