Partager via


Fourniture d'informations sur le contexte de l'IoTimer

Le pointeur de contexte passé à IoInitializeTimer identifie une zone de contexte où d’autres routines de pilote et la routine IoTimer elle-même peuvent conserver l’état des opérations chronométrées. Le gestionnaire d’E/S transmet le pointeur context chaque fois qu’il appelle la routine IoTimer .

Étant donné qu’une routine IoTimer est exécutée à IRQL = DISPATCH_LEVEL, sa zone de contexte doit se trouver dans la mémoire résidente de l’espace système. La plupart des pilotes qui ont des routines IoTimer utilisent l’extension d’appareil de l’objet d’appareil associé comme zone accessible en contexte, mais le contexte peut plutôt se trouver dans une extension de contrôleur si le pilote utilise un objet contrôleur ou dans un pool nonpage alloué par le pilote.

Suivez ces instructions pour la zone de contexte d’une routine IoTimer:

  • Si la routine IoTimer partage sa zone de contexte avec l’ISR du pilote, elle doit utiliser KeSynchronizeExecution pour appeler une routine SynchCritSection qui accède à la zone de contexte de manière multiprocesseur sécurisée. Pour plus d’informations, consultez Utilisation des sections critiques.

  • Si la routine IoTimer ne partage pas sa zone de contexte avec un ISR, mais qu’elle le partage avec une autre routine de pilote, le pilote doit protéger la zone de contexte partagée avec un verrou de rotation exécutif initialisé, afin d’accéder aux informations de contexte de manière sécurisée multiprocesseur. Pour plus d’informations, consultez Verrouillages de spin.