Função ExSetTimer (wdm.h)

A rotina ExSetTimer inicia uma operação de temporizador e define o temporizador para expirar no tempo de conclusão especificado.

Sintaxe

BOOLEAN ExSetTimer(
  [in]           PEX_TIMER           Timer,
  [in]           LONGLONG            DueTime,
  [in]           LONGLONG            Period,
  [in, optional] PEXT_SET_PARAMETERS Parameters
);

Parâmetros

[in] Timer

Um ponteiro para uma estrutura EX_TIMER . Essa estrutura é um objeto de temporizador que foi alocado anteriormente pela rotina ExAllocateTimer .

[in] DueTime

O tempo absoluto ou relativo no qual 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. Um tempo absoluto é expresso conforme o tempo passado, em unidades de tempo do sistema, desde o início do ano de 1601.

O parâmetro DueTime para um temporizador de alta resolução deve ser um tempo relativo (valor negativo) ou as verificações de bug de rotina.

[in] Period

Um período opcional para o temporizador em unidades de tempo do sistema (intervalos de 100 nanossegundos). Deve ser menor ou igual a MAXLONG. Para um temporizador único em vez de periódico, defina Período como zero.

[in, optional] Parameters

Um ponteiro para uma estrutura EXT_SET_PARAMETERS . O driver de chamada anteriormente chamou a rotina ExInitializeSetTimerParameters para inicializar essa estrutura.

Retornar valor

Essa rotina retornará TRUE se cancelar um temporizador que estava pendente no momento em que a rotina foi chamada. Caso contrário, a rotina retornará FALSE. Para obter mais informações, consulte Comentários.

Comentários

Seu driver pode chamar essa rotina para definir um temporizador para expirar em um momento futuro. Em seguida, o driver pode aguardar a expiração do temporizador. Ou o driver pode implementar uma rotina de retorno de chamada que é chamada quando o temporizador expira.

Depois que um driver chama ExSetTimer, o driver pode chamar uma rotina como KeWaitForSingleObject ou KeWaitForMultipleObjects para aguardar a expiração do temporizador. Quando o temporizador expira, o sistema operacional sinaliza o objeto de temporizador.

Como opção, o driver pode implementar uma rotina de retorno de chamada ExTimerCallback e fornecer um ponteiro para essa rotina como um parâmetro de entrada para a rotina ExAllocateTimer . Quando o temporizador expira, o sistema operacional chama a rotina ExTimerCallback .

Uma chamada exSetTimer cancela implicitamente qualquer operação de temporizador de conjunto iniciada anteriormente no objeto de temporizador especificado pelo Timer. Se o driver anteriormente chamou ExSetTimer para definir um temporizador que usa Timer e esse temporizador ainda não expirou quando ExSetTimer é chamado uma segunda vez, a segunda chamada cancela o temporizador da primeira chamada e inicia o novo temporizador. Nesse caso, a segunda chamada retorna TRUE. No entanto, se o temporizador iniciado pela primeira chamada expirar antes que a segunda chamada possa cancelar esse temporizador, a segunda chamada iniciará o novo temporizador e retornará FALSE.

Se o parâmetro Period for diferente de zero, o temporizador será periódico. Para um temporizador periódico, o parâmetro DueTime especifica a hora da expiração inicial do temporizador e Period especifica o intervalo entre expirações subsequentes.

O temporizador de hardware usado para o relógio do sistema sinaliza solicitações de interrupção em intervalos uniformes, mas o tratamento dessas interrupções pode ser atrasado pelo processamento de interrupção para outros dispositivos. Assim, para um temporizador periódico, o atraso de um tempo de expiração periódico para a hora em que o objeto de temporizador é sinalizado ou as execuções de rotina exTimerCallback podem variar de um período para o outro. Para obter mais informações, consulte Precisão do temporizador.

Um temporizador periódico não pode expirar mais de uma vez por tique de relógio do sistema. Definir o período de um temporizador como um valor menor do que o intervalo entre tiques de relógio do sistema não faz com que o temporizador expire mais de uma vez por tique de relógio do sistema, mas pode fazer com que os intervalos entre expirações sucessivas variem se a taxa do relógio do sistema mudar. Por exemplo, o sistema operacional pode aumentar temporariamente a taxa de relógio do sistema para atender aos requisitos de temporizador de um temporizador de alta resolução. Para obter mais informações, consulte Temporizadores de alta resolução.

Para um temporizador periódico que não é um temporizador de alta resolução, um driver pode obter expirações periódicas relativamente uniformes definindo Period como um múltiplo inteiro do intervalo padrão entre tiques de relógio do sistema.

Para evitar o consumo excessivo de energia, um driver não deve definir o período de um temporizador de alta resolução de execução prolongada como um valor menor que o intervalo padrão entre tiques de relógio do sistema. Caso contrário, o temporizador do relógio do sistema gerará interrupções continuamente na taxa máxima permitida do relógio do sistema.

Para obter mais informações, consulte Rotinas exXxxTimer e objetos EX_TIMER.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 8.1.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca Ntoskrnl.lib
IRQL <= DISPATCH_LEVEL

Confira também

EXT_SET_PARAMETERS

EX_TIMER

ExAllocateTimer

ExInitializeSetTimerParameters

ExTimerCallback

KeWaitForMultipleObjects

KeWaitForSingleObject