Индексный дескриптор специального файла содержит класс устройства, тип устройства и номер. Каждый тип устройства на соответствующую строку таблицы, соответствующую конкретному драйверу. Номер устройства передается драйверу в качестве параметра.
Драйвер байт-ориентированного устройства состоит в общем случае из секции открытия, чтения и записи файлов и секции управления режимом работы.
Драйвер блок-ориентированного устройства в общем случае состоит из секции закрытия/открытия файлов и секции стратегии. В таблице входа драйверов так же указаны адреса таблиц устройств rkrab, содержащих информацию об состоянии устройств.
Подсистема ввода/вывода Windows
Функции диспетчера ввода/вывода:
1. Создание пакетов запроса ввода/вывода (IRP – I/O Request Packet) и направление их соответствующему драйверу.
2. Удаление и освобождение пакетов после завершения операций.
3. Взаимодействие с диспетчером виртуальной памяти для предоставления файловым системам функции ввода/вывода с записью данных в память.
4. Мониторинг загруженных файловых систем и их вызов по требованию.
5. Предоставление поддержки синхронного и асинхронного ввода/вывода.
6. Управление буфером для операции ввода/вывода.
Высокоуровневые функции диспетчера объединены в программный интерфейс ввода/вывода I/O API. Драйверы устройств аналогичны драйверам файловых систем. В отличие от драйверов устройств, драйверы ФС:
1. Всегда вызываются в контексте потока, запрашивающего операцию ввода/вывода.
2. Взаимодействуют с диспетчерами КЭШа и виртуальной памяти для буферизации данных.
3. Драйверы фильтров ФС реализуют логические функции шифрования, удаленного хранения и так далее.
Каждый драйвер устройства взаимодействует с тремя типами объектов:
1. Объект драйвера – создается выполняемым модулем при загрузке драйвера. Содержит таблицу вызовов драйвера с адресами его процедур.
2. Объект устройства – представляет физическое устройство и описывает его характеристики. Может быть трех типов:
a. Объект физического устройства PDO – Physical Driver Object. Представляет устройство, подключенное к шине, и создается драйвером шины. Постоянно поддерживает связь с устройством.
b. Объект функционального устройства FDO – Functional Device Object. Создается драйвером класса устройств и драйвером порта.
c. Объект фильтра устройства DO – Filter Device Object. Устройство для драйвера фильтра.
3. Пакеты запросов ввода/вывода – используются для взаимодействия драйверов устройств в режиме ядра и выделяют в невыгружаемой памятью.
Элементы стека пакета IRP представляют собой структуры данных для отдельных драйверов, обрабатывающих IRP. Каждый драйвер получает закрытую область данных в стеке пакетов.