Поделиться через


Настройка IRP в промежуточных драйверах

Любой промежуточный драйвер, размещенный между драйвером файловой системы и драйвером устройства со съемным носителем, должен настроить расположение стека ввода-вывода драйвера следующего уровня в IRP. Из входящих IRP_MJ_READ, IRP_MJ_WRITE и IRP_MJ_DEVICE_CONTROL запросов промежуточный драйвер должен скопировать собственное расположение стека ввода-вывода Флаги в расположение стека ввода-вывода драйвера следующего нижнего уровня при настройке расположения стека ввода-вывода для нижнего драйвера.

Если промежуточный драйвер выделяет новые IRP для драйверов со съемными носителями более низкого уровня, он должен настроить эти IRP следующим образом:

  • Для запросов на передачу необходимо настроить контекст потока в каждой выделенной драйвером IRP из значения Tail.Overlay.Thread в исходном IRP.

  • Для IRP_MJ_READ, IRP_MJ_WRITE и IRP_MJ_DEVICE_CONTROL запросов необходимо скопировать флаги расположения стека ввода-вывода из исходной IRP в каждую выделенную драйвером IRP.

В противном случае файловая система не может ни поддерживать целостность кэшированных данных файлов, ни вызывать запрос на повторное подключение носителя, на котором хранится открытый файл.