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


Packet-Driven ввода-вывода с помощью повторно используемых irP

Диспетчер операций ввода-вывода, диспетчер Plug and Play и диспетчер питания используют пакеты запросов ввода-вывода (IRP) для взаимодействия с драйверами режима ядра и для взаимодействия драйверов друг с другом.

Диспетчер операций ввода-вывода выполняет следующие действия:

  • Принимает запросы ввода-вывода, которые обычно исходят из приложений в пользовательском режиме.

  • Создает irP для представления запросов ввода-вывода.

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

  • Отслеживает irP до их завершения.

  • Возвращает состояние исходному инициатору запроса каждой операции ввода-вывода.

IRP может быть перенаправлено нескольким драйверам. Например, запрос на открытие файла на диске может сначала перейти к драйверу файловой системы, через промежуточный драйвер зеркало, а в конечном итоге к драйверу диска и, возможно, драйверу аппаратной шины PnP. Этот набор драйверов называется стеком драйверов.

Таким образом, каждый IRP имеет фиксированную часть, а также одно расположение стека ввода-вывода для каждого драйвера, который управляет устройством:

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

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

Когда каждый драйвер обрабатывает IRP, он может получить доступ к расположению стека ввода-вывода в IRP, тем самым повторно использовать IRP на каждом этапе работы драйвера. Кроме того, драйверы более высокого уровня могут создавать (или повторно использовать) irP для отправки запросов даже к драйверам более низкого уровня.

Подробное описание irP см. в разделе Обработка irPs.