Иллюстрированный самоучитель по программированию систем защиты

Типы драйверов и характеристики

В NT существует два типа драйверов: драйверы пользовательского режима и драйверы режима ядра. В дальнейшем, говоря "драйвер", мы будем подразумевать драйвер режима ядра. Такие драйверы являются частью исполнительной системы, а более точно – элементами диспетчера ввода/вывода (архитектура NT и ее компоненты будут обсуждаться ниже). Как следует из названия, при работе драйвера режима ядра процессор находится в режиме ядра (RING 0 – см. любой справочник по защищенному режиму работы процессора).

Драйвер NT располагается в файле с расширением .sys и имеет стандартный РЕ-формат (РЕPortable Executable).

Драйверы реализованы как самостоятельные модули с четко определенным интерфейсом взаимодействия с ОС. Все драйверы имеют определенный системой набор стандартных функций драйвера (standard driver routines) и некоторое число внутренних функций, определенных разработчиком.

Драйверы режима ядра можно разбить на три типа:

  • драйверы высшего уровня (highest level drivers);
  • драйверы промежуточного уровня (intermediate drivers);
  • драйверы низшего уровня (lowest level drivers).

Как будет показано ниже, такое разбиение обусловлено многоуровневой моделью драйверов (layered driver model). Для сохранения общности изложения, монолитный драйвер можно включить в эту схему, хотя он не использует многоуровневую архитектуру. В этом случае он будет "гибридом" – драйвером, принадлежащим одновременно к нескольким типам. Например, монолитный драйвер, имеющий интерфейс с приложением и осуществляющий доступ к оборудованию, будет одновременно драйвером высшего и низшего уровня.

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

Можно привести следующие типы специализированных драйверов:

  • драйверы файловой системы;
  • сетевые драйверы.

Отдельно необходимо упомянуть архитектуру WDMWindows Driver Model. Эта архитектура позволяет создавать драйверы для Windows 98 и Windows 2000, совместимые на уровне двоичного кода.

Характеристики драйверов – это совокупность следующих вопросов:

  1. Поддержка динамической загрузки и выгрузки (однако могут быть исключения).
  2. Необходимость следовать определенным протоколам взаимодействия с системой, нарушение которых чаще всего ведет к "синему экрану" (Blue Screen Of Death, BSOD).
  3. Возможность "наслоения" драйверов поверх друг друга. В Win2000 эта возможность возведена в абсолют, хотя монолитные драйвера все еще поддерживаются.
  4. Поскольку драйвера являются частью ядра ОС, они могут сделать с системой все, что угодно, поэтому основная проблема – это закрытость архитектуры ОС.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.