Написание процедур обратного вызова перед операции и после операции
В своей подпрограмме DriverEntry драйвер минифильтра может зарегистрировать до одной процедуры обратного вызова перед операцией и до одной процедуры обратного вызова после операции для каждого типа операции ввода-вывода, которую необходимо отфильтровать.
В отличие от устаревшего драйвера фильтра файловой системы драйвер минифильтра может выбирать типы операций ввода-вывода для фильтрации. Драйвер минифильтра может зарегистрировать подпрограмму обратного вызова перед операцией для определенного типа операции ввода-вывода без регистрации обратного вызова после операции и наоборот. Драйвер минифильтра получает только те операции ввода-вывода, для которых он зарегистрировал подпрограмму обратного вызова перед операцией или после операции.
Подпрограмма обратного вызова перед операции похожа на подпрограмму диспетчеризации в устаревшей модели драйвера фильтра. Когда диспетчер фильтров обрабатывает операцию ввода-вывода, он вызывает подпрограмму обратного вызова перед операцией каждого драйвера минифильтра в стеке экземпляров драйвера минифильтра, зарегистрированного для этого типа операции ввода-вывода. Самый верхний драйвер минифильтра в стеке, то есть тот, экземпляр которого имеет самую высокую высоту, сначала получает операцию. Когда этот драйвер минифильтра завершает обработку операции, он возвращает операцию диспетчеру фильтров, который затем передает операцию следующему драйверу минифильтра и т. д. Если все драйверы минифильтра в стеке экземпляров драйвера минифильтра обработали операцию ввода-вывода, если драйвер мини-фильтра не завершил операцию ввода-вывода, диспетчер фильтров отправляет операцию устаревшим фильтрам и файловой системе.
Подпрограмма обратного вызова после операции аналогична процедуре завершения в устаревшей модели драйвера фильтра. Обработка завершения операции ввода-вывода начинается, когда диспетчер ввода-вывода передает операцию файловой системе и устаревшим фильтрам, которые имеют зарегистрированные подпрограммы завершения для операции. После завершения этих процедур завершения диспетчер фильтров выполняет обработку завершения операции. Затем диспетчер фильтров вызывает подпрограмму обратного вызова после операции каждого драйвера минифильтра в стеке экземпляров драйвера минифильтра, зарегистрированного для этого типа операции ввода-вывода. Драйвер нижнего минифильтра в стеке, то есть тот, экземпляр которого имеет самую низкую высоту, сначала получает операцию. Когда этот драйвер минифильтра завершает обработку операции, он возвращает ее диспетчеру фильтров, который затем передает операцию следующему драйверу минифильтра и т. д.
Этот раздел состоит из следующих частей.
Регистрация процедур обратного вызова перед операции и после операции
Фильтрация операций ввода-вывода в драйвере минифильтра
Написание процедур обратного вызова перед операции
Написание процедур обратного вызова после операции
Изменение параметров для операции ввода-вывода