Compartilhar via


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 ao tempo 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ãoperiódico que não se enfileira automaticamente.

[in, optional] Dpc

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

Valor de retorno

Se o objeto de temporizador já estiver na fila do temporizador do sistema, KeSetTimerEx retornará true.

Observações

A rotina de 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 que o DueTime especificado anteriormente tenha expirado cancela o temporizador e a chamada para o de Dpc, se houver, associado à 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 de Precisão do Temporizador.

Se o parâmetro Dpc for especificado, um objeto DPC será associado ao objeto de temporizador. Quando o temporizador expira, o objeto de temporizador é 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 executado 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ãoperió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.

Somente 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 drivers devem cancelar todos os temporizadores ativos em suas rotinas de Descarregar. Use KeCancelTimer para cancelar qualquer temporizador.

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

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

Consulte também

KeCancelTimer

KeInitializeDpc

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeWaitForMultipleObjects

KeWaitForSingleObject