Partager via


EXT_CALLBACK fonction de rappel (wdm.h)

Une routine de rappel ExTimerCallback s’exécute après l’expiration de l’intervalle de temps d’un objet de minuteur de EX_TIMER .

Syntaxe

EXT_CALLBACK ExtCallback;

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

Paramètres

[in] Timer

Pointeur vers une structure EX_TIMER . Cette structure est un objet de minuteur qui a été précédemment alloué par la routine ExAllocateTimer .

[in] Context

Valeur de contexte que votre pilote a précédemment fournie en tant que paramètre CallbackContext de la routine ExAllocateTimer .

Valeur de retour

None

Remarques

En option, votre pilote peut fournir un pointeur vers une routine ExTimerCallback dans le paramètre Callback que votre pilote transmet à la routine ExAllocateTimer . Une fois le minuteur expiré, le système d’exploitation appelle la routine ExTimerCallback .

Pour démarrer une opération de minuteur, le pilote transmet l’objet minuteur en tant que paramètre d’entrée à la routine ExSetTimer . Une fois le minuteur expiré, le système d’exploitation planifie l’exécution de la routine ExTimerCallback .

Un objet minuteur est un objet d’attente. Un thread de pilote peut appeler une routine telle que KeWaitForSingleObject ou KeWaitForMultipleObjects pour attendre l’expiration du minuteur. Lorsque le minuteur expire, le système d’exploitation signale l’objet minuteur.

Un minuteur peut être annulé avant son expiration. Le pilote peut appeler la routine ExCancelTimer pour annuler explicitement un minuteur. Si le pilote appelle la routine ExSetTimer pour démarrer un nouveau minuteur sur un objet minuteur avant l’expiration d’un minuteur précédemment défini sur cet objet, cet appel annule implicitement le minuteur précédent, puis démarre le nouveau minuteur.

Une routine ExTimerCallback peut appeler une routine telle qu’ExSetTimer ou ExDeleteTimer. Si une routine ExTimerCallback appelle ExDeleteTimer, le paramètre Wait fourni dans cet appel doit être FALSE. Pour plus d’informations, consultez Suppression d’un objet minuteur System-Allocated.

Dans un système multiprocesseur, les rappels ExTimerCallback pour deux expirations successives d’un minuteur périodique peuvent s’exécuter simultanément sur deux processeurs différents.

Pour plus d’informations, consultez Routines et EX_TIMER Objects ExXxxTimer.

Exemples

Pour définir une routine de rappel ExTimerCallback , vous devez d’abord fournir une déclaration de fonction qui identifie le type de routine de rappel que vous définissez. Windows fournit un ensemble de types de fonctions de rappel pour les pilotes. La déclaration d’une fonction à l’aide du type de fonction de rappel aide l’analyse du code pour les pilotes, le vérificateur de pilotes statique (SDV) et d’autres outils de vérification à rechercher les erreurs, et il s’agit d’une exigence pour l’écriture de pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une routine de rappel ExTimerCallback nommée MyExTimerCallback, utilisez le type de fonction EXT_CALLBACK, comme indiqué dans cet exemple de code :

EXT_CALLBACK  MyExTimerCallback;

Ensuite, implémentez votre routine de rappel comme suit :

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

Le type de fonction EXT_CALLBACK est défini dans le fichier d’en-tête Wdm.h. Pour identifier plus précisément les erreurs lorsque vous exécutez les outils d’analyse du code, veillez à ajouter l’annotation _Use_decl_annotations_ à votre définition de fonction. L’annotation _Use_decl_annotations_ garantit que les annotations appliquées au type de fonction EXT_CALLBACK dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes WDM. Pour plus d’informations sur _Use_decl_annotations_, consultez Annotating Function Behavior.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 8.1.
Plateforme cible Desktop (Expérience utilisateur)
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
IRQL Appelé à DISPATCH_LEVEL.

Voir aussi

EX_TIMER

ExAllocateTimer

ExCancelTimer

ExSetTimer

KeWaitForMultipleObjects

KeWaitForSingleObject