Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Основной код функции ввода-вывода устанавливается в расположении стека I/O драйвера для каждого входящего IRP.
Подпрограмма диспетчеризации драйвера должна проверить расположение стека ввода-вывода драйвера для IRP, чтобы определить, что делать, если выполняется или имеет место какое-либо из следующих условий:
Подпрограмма диспетчера обрабатывает более одного основного кода функции ввода-вывода.
Подпрограмма диспетчера должна обрабатывать набор дополнительных кодов функций для некоторых основных кодов функций. ИРП с незначительными кодами функций включают IRP_MJ_PNP и IRP_MJ_POWER, а также некоторые ИРП, которые должны обрабатывать драйвер порта SCSI и драйверы файловой системы.
Подпрограмма отправки драйвера устройства или тесно связанного драйвера с более высоким уровнем обрабатывает IRP_MJ_DEVICE_CONTROL или IRP_MJ_INTERNAL_DEVICE_CONTROL запросов, которые имеют связанный набор кодов управления ввода-вывода.
Чтобы получить указатель на расположение стека ввода-вывода драйвера, его подпрограмма отправки вызывает IoGetCurrentIrpStackLocation.
Подпрограммы отправки драйверов более высокого уровня всегда вызывают IoGetCurrentIrpStackLocation и также вызывают IoGetNextIrpStackLocation, чтобы получить указатель на расположение стека ввода-вывода следующего ниже драйвера для IRP, настроенных для следующего ниже драйвера, при передаче IRP вниз по стеку драйверов.
Подпрограмма DispatchDeviceControl или подпрограмма DispatchInternalDeviceControl драйвера устройства или, возможно, его тесно связанных драйверов классов, должна определить, какой код управления ввода-вывода установлен в расположении стека ввода-вывода драйвера в Parameters.DeviceIoControl.IoControlCode для каждого запроса. Код элемента управления ввода-вывода содержится в расположении стека ввода-вывода драйвера.
В большинстве случаев подпрограмма DispatchDeviceControl или DispatchInternalDeviceControl драйвера более высокого уровня просто передает запрос IRP_MJ_DEVICE_CONTROL или IRP_MJ_INTERNAL_DEVICE_CONTROL на следующий драйвер после настройки расположения стека в IRP. Однако драйверы классов SCSI должны проверять наличие определенных кодов элементов управления ввода-вывода портов SCSI, чтобы они могли правильно настроить расположение стека ввода-вывода драйвера порта SCSI перед передачей этих запросов.