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. |