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


Запрет операции быстрого ввода-вывода в процедуре обратного вызова перед операцией

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

Как и при завершении операции ввода-вывода, запрет быстрой операции ввода-вывода означает остановить ее обработку и вернуть ее диспетчеру фильтров. Однако запрет быстрой операции ввода-вывода отличается от ее завершения. Если драйвер минифильтра запрещает быструю операцию ввода-вывода, выданную диспетчером ввода-вывода, диспетчер операций ввода-вывода может повторно выдать ту же операцию, что и эквивалентную операцию на основе IRP.

Если подпрограмма обратного вызова драйвера мини-фильтра перед работой запрещает быструю операцию ввода-вывода, диспетчер фильтров выполняет следующие действия:

  • Не отправляет операцию в драйверы минифильтра ниже текущего драйвера минифильтра, в устаревшие фильтры или в файловую систему.

  • Вызывает подпрограммы обратного вызова после операции драйверов минифильтра над текущим драйвером минифильтра в стеке экземпляров драйвера минифильтра.

  • Не вызывает подпрограмму обратного вызова после операции текущего драйвера минифильтра для операции, если она существует.

Драйвер минифильтра запрещает быструю операцию ввода-вывода, возвращая FLT_PREOP_DISALLOW_FASTIO из процедуры обратного вызова перед операцией.

Подпрограмма обратного вызова перед операцией не должна задавать поле IoStatus.Status структуры данных обратного вызова, так как диспетчер фильтров автоматически задает для этого поля значение STATUS_FLT_DISALLOW_FAST_IO.

FLT_PREOP_DISALLOW_FASTIO можно вернуть только для быстрых операций ввода-вывода. Чтобы определить, является ли операция быстрой операцией ввода-вывода, см. раздел FLT_IS_FASTIO_OPERATION.

Драйверы мини-фильтра не могут возвращать FLT_PREOP_DISALLOW_FASTIO для операций IRP_MJ_SHUTDOWN, IRP_MJ_VOLUME_MOUNT или IRP_MJ_VOLUME_DISMOUNT.