Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Когда драйвер получает запрос ввода-вывода, который не может обрабатываться, обычно он выполняет одно из следующих действий:
Он пересылает полученный запрос другому драйверу.
Он создает дополнительные запросы и отправляет их другому драйверу.
Драйверы на основе платформы пересылают запросы с помощью целевых объектов ввода-вывода, представляющих другие драйверы в системе. Драйверы могут использовать любой из следующих методов для пересылки запроса в целевой объект ввода-вывода:
Драйвер может пересылать запросы ввода-вывода на следующий уровень драйвера, вызвав WdfDeviceGetIoTarget, а затем WdfRequestFormatRequestUsingCurrentType и, наконец, WdfRequestSend.
Этот метод полезен, только если драйвер получает запрос, который не должен изменяться перед пересылкой.
Драйвер может вызвать WdfFdoInitSetFilter , чтобы зарегистрировать себя в качестве драйвера фильтра.
Если драйвер фильтра не предоставляет очередь ввода-вывода для определенного типа запроса ввода-вывода, платформа автоматически перенаправит запросы этого типа следующему драйверу ниже.
Как правило, драйвер функции проверяет содержимое каждого запроса ввода-вывода. Если драйвер функции не может обработать запрос, он может изменить запрос и перенаправить его в целевой объект ввода-вывода. Кроме того, он может создать один или несколько новых запросов и отправить их в целевой объект ввода-вывода.
Целевой объект ввода-вывода платформы определяет несколько методов отправки запросов ввода-вывода другим драйверам. Например, драйвер может вызывать WdfIoTargetFormatRequestForRead, за которым следует WdfRequestSend, чтобы отправить запрос на чтение целевому объекту ввода-вывода. Дополнительные сведения о целевых объектах ввода-вывода см. в разделе Использование целевых объектов ввода-вывода.
Редко автор драйвера может потребовать указать содержимое базового WDM расположения стека операций ввода-вывода перед отправкой запроса к целевому объекту ввода-вывода. В таких случаях драйвер может вызывать WdfRequestWdmFormatUsingStackLocation перед вызовом WdfRequestSend.
Иногда драйвер должен отправлять один и тот же запрос нескольким целевым объектам ввода-вывода, так как драйвер должен отправлять одну команду всем его устройствам. Перед отправкой запроса в целевой объект ввода-вывода драйвер может вызвать WdfRequestChangeTarget , чтобы убедиться, что целевой объект ввода-вывода доступен.
Драйвер должен в конечном итоге завершить каждый запрос, который он перенаправляет в целевой объект ввода-вывода, если только он не задает флаг WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET при вызове WdfRequestSend.
Обратите внимание, что когда драйвер перенаправляет запрос, фреймворк не буквально передает объект запроса фреймворка от исходного драйвера к целевому драйверу. Вместо этого платформа создает новый объект запроса в драйвере, который получает запрос. Только базовый пакет запроса ввода-вывода (IRP) передается от одного драйвера к другому.