Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Указатель контекста, переданный в функцию IoInitializeTimer, указывает на область контекста, где другие подпрограммы драйвера и сама подпрограмма IoTimer могут поддерживать состояние операций с временем. Диспетчер ввода-вывода передает указатель контекста всякий раз, когда он вызывает подпрограмму IoTimer .
Так как подпрограмма IoTimer выполняется в IRQL = DISPATCH_LEVEL, ее контекстная область должна находиться в резидентной памяти системного пространства. Большинство драйверов, имеющих подпрограммы IoTimer, используют расширение устройства для связанного объекта устройства в качестве области, доступной для контекста, но контекст может вместо этого находиться в расширении контроллера, если драйвер использует объект контроллера, или в непагированном пуле, выделенном драйвером.
Следуйте этим рекомендациям дляобласти контекста подпрограммыIoTimer:
Если подпрограмма IoTimer предоставляет общий доступ к области контекста с ISR драйвера, она должна использовать KeSynchronizeExecution для вызова подпрограммы SynchCritSection, которая обращается к области контекста в многопроцессорном режиме. Дополнительные сведения см. в разделе Использование критически важных разделов.
Если подпрограмма IoTimer не предоставляет общий доступ к области контекста с ISR, но предоставляет общий доступ к другой подпрограмме драйвера, драйвер должен защитить общую область контекста с помощью инициализированной исполнительной блокировки спина, чтобы получить доступ к данным контекста в многопроцессорном режиме. Дополнительные сведения см. в разделе "Замки спина".