Программирование устройства для операции ввода-вывода

Используйте следующие общие рекомендации по проектированию, написанию и вызову SynchCritSection подпрограмм, программируя устройство для операций ввода-вывода:

  • Подпрограмма SynchCritSection, которая программирует устройство для операций ввода-вывода, должна как можно быстрее возвращать управление.

    По этой причине подпрограмма SynchCritSection должна выполнять только то, что необходимо для настройки устройства для ввода/вывода. Поэтому драйвер должен выполнять всю предварительную обработку IRP, инициализацию информации о состоянии для других подпрограмм драйвера и получение аппаратных ресурсов перед вызовом процедуры SynchCritSection.

  • Драйвер устройства может иметь несколько подпрограмм SynchCritSection для программирования устройства.

    Например, драйвер устройства, для которого настройка запроса на чтение существенно отличается от настройки определенных запросов управления устройствами, может иметь отдельные подпрограммы SynchCritSection для программирования устройства для каждого типа запроса.

  • Каждая рутина SynchCritSection должна как можно быстрее возвращать управление, так как выполнение любой рутины SynchCritSection предотвращает выполнение ISR драйвера.

    Вы не должны писать одну, большую, общепринятую SynchCritSection подпрограмму с оператором или несколькими вложенными if.. тогда.. в противном инструкции, чтобы определить, какие операции будут выполняться или какие сведения о состоянии для обновления. С другой стороны, следует избегать написания многочисленных SynchCritSection подпрограмм, которые программируют только один регистр устройства.