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

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

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

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

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

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