Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
За исключением драйверов файловой системы, драйвер более высокого уровня обычно не имеет внутренних очередей драйверов для IRPs. Такая подпрограмма DispatchReadWrite драйвера может передавать IRPs с допустимыми параметрами в более низкие драйверы, возможно, после настройки подпрограммы IoCompletion, как описано в разделе «Передача IRPs вниз стека драйверов».
Однако процедура DispatchReadWrite драйвера класса SCSI отвечает за разделение крупных запросов на передачу, если это необходимо, прежде чем отправить IRP с основным кодом функции IRP_MJ_READ или IRP_MJ_WRITE к паре драйверов порта/минипорта SCSI. Дополнительные сведения см. в разделе "Подпрограмма splitTransferRequest" драйвера класса хранилища.
Если драйвер более высокого уровня выделяет одну или несколько IRP и настраивает их для драйвера более низкого уровня в своей подпрограмме DispatchReadWrite с целью запроса количества частичных передач, подпрограмма DispatchReadWrite должна вызывать IoSetCompletionRoutine с каждой IRP, выделенной драйвером. Драйвер должен зарегистрировать свою подпрограмму IoCompletion , чтобы отслеживать, сколько данных передается в каждой операции частичной передачи, чтобы подпрограмма IoCompletion может освободить все выделенные драйвером IRPs и, в конечном итоге, завершить исходный запрос.
Если базовый драйвер управляет устройством с съемными носителями, все IRP, выделенные драйвером более высокого уровня, должны иметь контекст потока. Чтобы установить контекст потока, драйвер, выделяющий ресурсы, должен задать значение Irp-Tail.Overlay>.Thread в каждом новом IRP, полученное из значения поступающего IRP. Дополнительные сведения см. в поддержке съемных носителей.
Если базовый драйвер устройства возвращает IRP для частичной передачи с ошибкой, подпрограмма IoCompletion может повторить запрос частичной передачи или завершить обработку исходного IRP, установив блок состояния ввода-вывода с возвращенной ошибкой, после освобождения любых IRP и памяти, выделенных драйвером более высокого уровня.
Если подпрограмма DispatchReadWrite драйвера более высокого уровня выделяет память для операций частичной передачи, а ее выделение будет осуществляться подпрограммой IoCompletion драйвера (или базовым драйвером устройства), подпрограмма DispatchReadWrite должна выделить память из непагрегированного пула.