Compartilhar via


Rotinas e objetos EX_TIMER do ExXxxTimer

A partir do Windows 8.1, um conjunto abrangente de rotinas ex xxxtimer está disponível para gerenciar temporizadores. Essas rotinas usam objetos de temporizador baseados na estrutura EX_TIMER . As rotinas do Temporizador ExXxx são substituições para as rotinas do Temporizador KeXxx, que estão disponíveis a partir do Windows 2000. Os drivers destinados a serem executados somente em Windows 8.1 e versões posteriores do Windows podem usar as rotinas do Temporizador ExXxx em vez das rotinas do Temporizador KeXxx. Windows 8.1 e versões posteriores do Windows continuam a dar suporte às rotinas do Temporizador KeXxx.

As rotinas do Temporizador ExXxx têm todas as funcionalidades importantes fornecidas pelas rotinas do Temporizador KeXxx. Além disso, as rotinas do Temporizador ExXxx dão suporte a dois tipos de temporizador, temporizadores de alta resolução e temporizadores sem ativação, que não são compatíveis com as rotinas do Temporizador KeXxx. Temporizadores de alta resolução são temporizadores cujos tempos de expiração podem ser especificados com maior precisão do que os de temporizadores cuja precisão é limitada pela resolução padrão do relógio do sistema. Temporizadores sem ativação são temporizadores que evitam acordar desnecessariamente processadores de estados de baixa potência. Para obter mais informações, consulte estes tópicos:

Temporizadores de alta resolução

Temporizadores sem Ativação

A partir do Windows 8.1, as seguintes rotinas ex xxxtimer estão disponíveis:

ExAllocateTimer

ExSetTimer

ExCancelTimer

ExDeleteTimer

A rotina ExSetTimer pode ser usada em vez da rotina KeSetTimer ou KeSetTimerEx . A rotina ExCancelTimer pode ser usada em vez da rotina KeCancelTimer .

As rotinas ExAllocateTimer e ExDeleteTimer não têm equivalentes diretos do KeXxxTimer . Essas duas rotinas alocam e liberam um objeto de temporizador. Esse objeto timer é uma estrutura de EX_TIMER alocada pelo sistema cujos membros são opacos aos drivers. Por outro lado, o objeto de temporizador usado pelas rotinas do Temporizador KeXxx é uma estrutura KTIMER alocada pelo driver. O driver chama a rotina KeInitializeTimer ou KeInitializeTimerEx para inicializar esse objeto. ExAllocateTimer inicializa os objetos de temporizador alocados. Para obter mais informações sobre ExDeleteTimer, consulte Excluindo um objeto timer System-Allocated.

EX_TIMER e estruturas KTIMER são objetos de espera. Depois que um driver chama ExSetTimer, KeSetTimer ou KeSetTimerEx para definir um temporizador, o driver pode chamar uma rotina como KeWaitForSingleObject ou KeWaitForMultipleObjects para aguardar a expiração do temporizador. O objeto timer é sinalizado quando o temporizador expira. Como opção, um driver pode fornecer um ponteiro para uma rotina de retorno de chamada ExTimerCallback ou CustomTimerDpc implementada pelo driver que o sistema operacional chama após a expiração do temporizador.

As rotinas do Temporizador KeXxx têm duas funcionalidades que não são fornecidas pelas rotinas do Temporizador ExXxx, mas essas funcionalidades não são necessárias para a maioria dos drivers.

Primeiro, a estrutura KTIMER usada como objeto de temporizador pelas rotinas do Temporizador KeXxx é alocada pelo driver. O driver pode pré-alocar esse objeto para garantir que o objeto esteja disponível mesmo em circunstâncias em que os recursos são restritos e as alocações de memória podem falhar. Por outro lado, uma chamada para ExAllocateTimer para alocar um objeto de temporizador pode falhar em um ambiente restrito a recursos. No entanto, poucos drivers precisam ser projetados para operar em ambientes em que as alocações de memória falham, e a maioria dos drivers se beneficia da conveniência de uma rotina ExAllocateTimer que aloca e inicializa um objeto de temporizador.

Em segundo lugar, não há nenhum ExXxxTimer equivalente à rotina KeReadStateTimer , o que indica se um objeto de temporizador está no estado sinalizado. No entanto, essa rotina raramente é usada. Se necessário, um driver que usa as rotinas do Temporizador ExXxx pode marcar se um objeto de temporizador está no estado sinalizado lendo um valor booliano definido pela rotina de retorno de chamada ExTimerCallback que o driver fornece para a rotina ExAllocateTimer.