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


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

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

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

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

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

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

  • Отслеживает I/O Запросы (IRPs) до их завершения.

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

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

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

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

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

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

Подробные сведения об IRP см. в разделе "Обработка irPs".