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


Примеры объектов устройств WDM

На следующем рисунке показаны объекты устройства, представляющие устройства клавиатуры и мыши, показанные ранее на рисунке, иллюстрирующий конфигурации оборудования клавиатуры и мыши. Драйверы клавиатуры и мыши, показанные на рисунке, иллюстрирующие уровни клавиатуры и драйвера мыши , создают эти объекты устройства, вызывая подпрограмму поддержки ввода-вывода (IoCreateDevice).

объекты устройства клавиатуры и мыши.

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

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

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

Как показано ранее на рисунке "Уровни драйвера клавиатуры и мыши ", каждый драйвер порта является драйвером шины (самый низкий уровень), поэтому каждый драйвер порта устройства, создающего прерывания, должен настроить объекты прерывания и зарегистрировать ISR.

Драйвер порта с двумя устройствами, например драйвер i8042 для клавиатуры и вспомогательного контроллера устройства, показанного на рисунке конфигураций оборудования клавиатуры и мыши , должен настроить объекты прерываний для конкретного устройства, если каждое устройство использует другой вектор прерывания. При написании такого драйвера можно реализовать либо отдельные ISR для каждого устройства, либо единый ISR для обоих устройств.