Написание процедур SynchCritSection
Драйверы используют свои подпрограммы SynchCritSection для двух основных целей:
Программирование устройства для операции ввода-вывода
Доступ к общим сведениям о состоянии
Как и ISR, подпрограмма SynchCritSection должна выполняться как можно быстрее, выполняя только то, что необходимо для настройки регистров устройств или обновления контекстных данных, прежде чем возвращать ее.
Так как KeSynchronizeExecution удерживает блокировку прерывания драйвера устройства во время выполнения процедуры SynchCritSection , ISR драйвера не может выполняться до тех пор, пока подпрограмма SynchCritSection не вернет управление.
Для любого полученного IRP драйвер устройства должен выполнять как можно больше операций ввода-вывода либо в IRQL PASSIVE_LEVEL в подпрограммах диспетчеризации (или, возможно, выделенных устройствами потоках), либо в IRQL DISPATCH_LEVEL в подпрограммах StartIo и DPC.
Дополнительные сведения о синхронизации критических разделов см. в разделе Использование спин-блокировок: пример.