Настройка 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.
В противном случае файловая система не может ни поддерживать целостность кэшированных данных файлов, ни вызывать запрос на повторное подключение носителя, на котором хранится открытый файл.