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


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

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

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

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

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

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