Partager via


Fourniture d’informations de contexte CustomTimerDpc

Le pointeur DeferredContext passé à KeInitializeDpc pointe vers une zone de contexte où d’autres routines de pilotes, ainsi que la routine CustomTimerDpc elle-même, peuvent maintenir l’état. Le noyau transmet le pointeur DeferredContext à chaque appel à la routine DPC.

Contrairement à une routine IoTimer , un CustomTimerDpc n’a aucune association particulière avec un objet d’appareil créé par un pilote. Toutefois, un pilote peut associer une routine CustomTimerDpc à un objet d’appareil créé par un pilote en incluant un pointeur vers l’objet d’appareil dans sa zone de contexte.

La zone de contexte doit se trouver dans la mémoire résidente allouée au pilote. En règle générale, cette zone de contexte se trouve dans une extension d’appareil, mais elle peut également se trouver dans un pool non paginé. Si le pilote utilise un objet contrôleur, il peut se trouver dans une extension de contrôleur. Le contenu de la zone de contexte est déterminé par le pilote.

Si une routine CustomTimerDpc partage des informations de contexte avec l’ISR du pilote, la routine CustomTimerDpc doit utiliser KeSynchronizeExecution pour appeler une routine SynchCritSection qui accède au contexte partagé. Pour plus d’informations, consultez Utilisation de sections critiques.

Si le CustomTimerDpc partage les informations de contexte avec d’autres routines de pilotes non-ISR, la zone de DeferredContext doit être protégée par un verrou de rotation exécutif. Pour plus d’informations, consultez Spin Locks.