15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Что такое драйвер в системе Windows 95, 98 и Me.

Автор: Крупорницкий Дмитрий

 

Не пугайтесь немного "детского" названия – я постараюсь очень кратко рассмотреть драйвера в Windows, чтобы дать читателю возможность понять – надо это ему для его программы, или нет.

Перед работой над драйвером, вспомним, что такое приоритет задачи на уровни процессора. Приоритет задачи – это то количество времени процессора, которое задача может затратить на себя. Существует всего 4 приоритета (они ещё называются RING, и обычно пишутся как RING0, RING1 …). Приоритет с номером 0 (RING0) является наивысшим и имеет все права на процессор. Приоритет с номером 3 – наименьший, он имеет самые малые права на процессор. Все приложения в системе Windows изначально имеют приоритет 3 – самый низкий. А вот драйвера в системе имеют приоритет 0 – самый высокий. Использование приоритета 3 у обычных программ проявляется в том, что они не могут использовать специальные "привилегированные" инструкции процессора (HLT, OUT, IN …), в отличии от драйверов, которые могут заставить процессор такие инструкции выполнять.

Теперь давайте вспомним про Виртуальную Машину (VMM – Virtual Machine Manager), но прежде всего давайте разберёмся, для чего она нужна.

На данный момент существует много хороших программ, написанных под старую добрую MSDOS. Но вот беда – в Windows совершенно другая система обработки вызовов системы. Если в DOS программа сама вызывала систему, то в Windows система сама вызывает программу, посылая ей сообщения. Сообщения разняться по своей сути и я не буду останавливаться на них – можете сами почитать о них в MSDN.

Так вот – для каждой DOS и Windows программы при её загрузке создаётся такая вот VMM, которая затем и выполняет команды, записанные в РЕ файле (формат Windws) (иногда эту машину после загрузки называют также и Основная Системная Машина).

Что это за машина? – просто фикция – плод труда программистов.

Теперь рассмотрим процесс загрузки драйверов в память при старте:

  1. После включения питания, в память загружается IO.SYS
  2. Выполнятся AUTOEXEC.BAT и CONFIG.SYS
  3. Вызывается WIN.COM
  4. WIN.COM загружает Виртуальную машину – VMM32.VXD
  5. VMM32.VXD загружает Виртуальную Машину в дополнительную память через XMS драйвер.
  6. Инициализация машины и других драйверов
  7. Машина переключает систему в защищённый режим и создает системную виртуальную машину.
  8. Затем Virtual Shell Device (устройство виртуальной оболочки) грузит саму графическую оболочку, путём вызова KERNL386.EXE
  9. А затем KERNL386.EXE грузит всё остальное, что надо для системы.

 

 

Как вы могли заметить, VxD выполняются до загрузки основной системы, в связи с этим у них наивысший приоритет в системе.

 

Теперь рассмотрим непосредственно драйвер. VxD (вместо х можно подставить первую букву устройства драйвера) – это основная нить, которая связывает вашу программу и устройство. Разница между VxD драйверами и SYS аналогами в том, что VxD могут работать только в Windows 95, 98, Me средах, но не в NT, в отличии от SYS варианта драйвера.

Хоть имя драйвера имеет в себе букву "х", что значит "некоторое устройство", но драйвер не обязан обрабатывать некоторое устройство. Вы можете рассматривать драйвер просто как DLL библиотеку, выполняющуюся на наивысшем уровне приоритета, со всеми вытекающими отсюда последствиями. Имейте ввиду, что отладка драйверов – дело неблагодарное ( J ), при неправильном варианте программирования система просто "виснет" (из личного опыта), причём обязательно на самом интересном месте (при загрузке). Поэтому разбирайтесь со всеми багами (ну или старайтесь хоть) "на берегу", до загрузки драйвера.

 

Существует 2 варианта драйверов: статические и динамические. Разница в них та же, что и в библиотеках: статические находятся в памяти всё время, динамические отгружаются по мере необходимости.

 

Ну вот в принципе и всё, что можно сказать "вот так" с ходу и просто. Очень много, что осталось несказанным, всё просто не охватить. Но это уже дело целой книги. Под конец, давайте ещё раз отметим, для чего нужны драйвера в Windows:

 

  1. Выполнение операций с оборудованием
  2. Непосредственная работа с портами ввода-вывода
  3. Выполнение "необычных" инструкций процессора
  4. Контроль вызовов определённых функций
  5. Тотальный контроль за системой

 

Дмитрий Крупорницкий