EXT_CALLBACK função de retorno de chamada (wdm.h)

Uma rotina de retorno de chamada exTimerCallback é executada depois que um intervalo de tempo de um objeto de temporizador EX_TIMER expira.

Sintaxe

EXT_CALLBACK ExtCallback;

void ExtCallback(
  [in] PEX_TIMER Timer,
  [in] PVOID Context
)
{...}

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] Context

O valor de contexto que o driver forneceu anteriormente como o parâmetro CallbackContext da rotina ExAllocateTimer .

Retornar valor

Nenhum

Comentários

Como opção, o driver pode fornecer um ponteiro para uma rotina ExTimerCallback no parâmetro Callback que o driver passa para a rotina ExAllocateTimer . Depois que o temporizador expirar, o sistema operacional chamará a rotina ExTimerCallback .

Para iniciar uma operação de temporizador, o driver passa o objeto de temporizador como um parâmetro de entrada para a rotina ExSetTimer . Depois que o temporizador expirar, o sistema operacional agenda a rotina ExTimerCallback para execução.

Um objeto de temporizador é um objeto de espera. Um thread de 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.

Um temporizador pode ser cancelado antes de expirar. O driver pode chamar a rotina ExCancelTimer para cancelar explicitamente um temporizador. Se o driver chamar a rotina ExSetTimer para iniciar um novo temporizador em um objeto de temporizador antes que um temporizador definido anteriormente nesse objeto expire, essa chamada cancelará implicitamente o temporizador anterior e iniciará o novo temporizador.

Uma rotina ExTimerCallback pode chamar uma rotina como ExSetTimer ou ExDeleteTimer. Se uma rotina ExTimerCallback chamar ExDeleteTimer, o parâmetro Wait fornecido nesta chamada deverá ser FALSE. Para obter mais informações, consulte Excluindo um objeto timer System-Allocated.

Em um sistema multiprocessador, os retornos de chamada exTimerCallback para duas expirações sucessivas de um temporizador periódico podem ser executados simultaneamente em dois processadores diferentes.

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

Exemplos

Para definir uma rotina de retorno de chamada exTimerCallback , primeiro você deve fornecer uma declaração de função que identifique o tipo de rotina de retorno de chamada que você está definindo. O Windows fornece um conjunto de tipos de função de retorno de chamada para drivers. Declarar uma função usando o tipo de função de retorno de chamada ajuda a Análise de Código para Drivers, SDV ( Verificador de Driver Estático ) e outras ferramentas de verificação a encontrar erros e é um requisito para escrever drivers para o sistema operacional Windows.

Por exemplo, para definir uma rotina de retorno de chamada exTimerCallback chamada MyExTimerCallback, use o tipo de função EXT_CALLBACK, conforme mostrado neste exemplo de código:

EXT_CALLBACK  MyExTimerCallback;

Em seguida, implemente sua rotina de retorno de chamada da seguinte maneira:

_Use_decl_annotations_
VOID
  MyExTimerCallback(
    PEX_TIMER  Timer,
    PVOID  Context
    )
  {...}

O tipo de função EXT_CALLBACK é definido no arquivo de cabeçalho Wdm.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a _Use_decl_annotations_ anotação à sua definição de função. A _Use_decl_annotations_ anotação garante que as anotações aplicadas ao tipo de função EXT_CALLBACK no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função para drivers WDM. Para obter mais informações sobre _Use_decl_annotations_, consulte Anotando o comportamento da função.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 8.1.
Plataforma de Destino Área de Trabalho
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Chamado em DISPATCH_LEVEL.

Confira também

EX_TIMER

ExAllocateTimer

ExCancelTimer

ExSetTimer

KeWaitForMultipleObjects

KeWaitForSingleObject