Поделиться через


Предоставление сведений о контексте IoTimer

Указатель контекста, переданный в функцию IoInitializeTimer, указывает на область контекста, где другие подпрограммы драйвера и сама подпрограмма IoTimer могут поддерживать состояние операций с временем. Диспетчер ввода-вывода передает указатель контекста всякий раз, когда он вызывает подпрограмму IoTimer .

Так как подпрограмма IoTimer выполняется в IRQL = DISPATCH_LEVEL, ее контекстная область должна находиться в резидентной памяти системного пространства. Большинство драйверов, имеющих подпрограммы IoTimer, используют расширение устройства для связанного объекта устройства в качестве области, доступной для контекста, но контекст может вместо этого находиться в расширении контроллера, если драйвер использует объект контроллера, или в непагированном пуле, выделенном драйвером.

Следуйте этим рекомендациям дляобласти контекста подпрограммыIoTimer:

  • Если подпрограмма IoTimer предоставляет общий доступ к области контекста с ISR драйвера, она должна использовать KeSynchronizeExecution для вызова подпрограммы SynchCritSection, которая обращается к области контекста в многопроцессорном режиме. Дополнительные сведения см. в разделе Использование критически важных разделов.

  • Если подпрограмма IoTimer не предоставляет общий доступ к области контекста с ISR, но предоставляет общий доступ к другой подпрограмме драйвера, драйвер должен защитить общую область контекста с помощью инициализированной исполнительной блокировки спина, чтобы получить доступ к данным контекста в многопроцессорном режиме. Дополнительные сведения см. в разделе "Замки спина".