Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
За исключением драйверов самого высокого уровня, все драйверы асинхронно обрабатывают запросы IRP_MJ_READ и IRP_MJ_WRITE. Подпрограммы DispatchRead и DispatchWrite даже в драйвере высокого уровня не могут ожидать завершения обработки асинхронного запроса на чтение или запись; они должны передать такой запрос более низким водителям и вернуть STATUS_PENDING.
Аналогичным образом, подпрограмма DispatchReadWrite драйвера устройства низшего уровня должна передавать запрос на передачу к другим подпрограммам драйверов, которые обрабатывают запросы ввода-вывода устройства, а затем возвращать STATUS_PENDING.
Драйвер более высокого уровня иногда должен настроить частичные IRP-запросы и передать их нижестоящим драйверам. Драйвер более высокого уровня может завершить исходный IRP чтения/записи только после того, как драйверы более низкого уровня выполнят все его частичные запросы на передачу данных.
Например, для подпрограммы DispatchReadWrite драйвера класса SCSI требуется разделять большие запросы передачи, которые превышают возможности передачи базового HBA, на набор запросов на частичную передачу. Драйвер класса должен настроить параметры в своих частичных передачах IRP так, чтобы драйверы порта и минипорта SCSI могли удовлетворить каждый запрос частичной передачи за одну операцию DMA.
Другим драйверам устройств, использующим DMA или PIO, возможно, также потребуется разделить большие запросы на передачу.
Дополнительные сведения об использовании DMA и PIO см. в разделе "Методы ввода и вывода".