Драйверы Windows работают в режиме ядра. В этой статье я расскажу про различные типы драйверов. И покажу как посмотреть на установленные драйверы в системе.
Драйверы
Все привыкли что драйверы это прослойка между оборудованием и операционной системой. И отчасти это верно. Но они могут и не относится к физическому устройству, например есть драйвер файловой системы.
Драйверы представляют собой файлы .sys и обеспечивают интерфейс между вводом/выводом и соответствующим оборудованием или модулем ядра. Про диспетчер ввода/вывода я уже рассказывал в прошлой статье.
Драйверы в основном написаны на языке C, но недавно стало возможно писать их для Windows на C++.
Типы драйверов
Можно выделить следующие типы драйверов:
- Драйвера физических устройств. Они необходимы для работы обычных устройств. Например принтеров, сканеров и другого оборудования.
- Фильтры файловой системы. Необходимы, например, для создания программных RAID или шифрования дисков.
- Сетевые перенаправители. Это драйверы файловой системы, которые передают запросы по сети на другую машину. В качестве клиента в сетевой операции ввода/вывода отправляет запросы на сервер и обрабатывает ответы. Как сервер получает запросы ввода/вывода и обрабатывает их. Таким образом они позволяют приложению получать доступ к ресурсам на удаленных серверах и управлять ими, как если бы они находились на локальном компьютере.
- Драйвера потоков. Необходимы для поддержки сетевых протоколов, например TCP/IP.
- Потоковые драйвера-фильтры ядра. Они могут объединятся в цепочки для обработки потоков данных. Например для записи или воспроизведения аудио и видио.
- Программные драйвера. Модули ядра, работающие только в режиме ядра. Например многие программы из Sysinternals (Process Explorer, Process Monitor) устанавливают, а затем используют такие модули.
Еще можно разделить их на работающие в пользовательском режиме и в режиме ядра.
В пользовательском режиме работают драйверы принтеров, они переводят аппаратно-независимые запросы в понятные принтеру команды. Которые затем передаются драйверу порта в режиме ядра, например usbprint.sys.
В режиме ядра работают драйверы файловой системы, которые принимают запросы к файлам на ввод / вывод. Тут же работают драйверы PnP, которые общаются с диспетчером PnP. Это драйверы запоминающих устройств, видеоадаптеров, устройств ввода и сетевых адаптеров. Здесь же работают расширения ядра и драйверы сетевых протоколов, но они не связаны с физическими устройствами.
Просмотр установленных драйверов
Чтобы посмотреть информацию о загруженных в систему драйверах можно воспользоваться программой «Сведения о системе» (msinfo32.exe). Эта программа является стандартной для Windows. В программе необходимо перейти в «Программная среда» / «Системные драйверы«. В открывшемся окне вы увидите информацию об установленных драйверах:
Также можно посмотреть список запущенных драйверов программой Process Explorer. Для этого нужно включить отображение всех пользователей в меню «View«. Далее выбрать процесс «System«. И включить отображение нижней панели (View / Lower Pane View):
То есть драйверы мапятся к процессу «System«.
Из чего состоит драйвер
Драйверы состоят из набора процедур, вызываемых для обработки различных запросов. Например можно выделить следующие процедуры:
- инициализации — при загрузке драйвера в ОС диспетчер ввода / вывода выполняет эту процедуру;
- добавления устройства — если это PnP драйвер, то при добавлении нового устройства PnP диспетчер выполняет эту процедуру;
- диспетчеризации — когда происходит запрос от оборудования к системе, то генерируется IRQ запрос и через эту процедуру вызывается драйвер;
- начального ввода / вывода — эта процедура используется если нужно организовать передачу данных на устройство или с него;
- обработки прерываний — диспетчер прерываний передает управление этой процедуре когда устройство прерывает работу процессора для своих нужд;
- dpc — а тут выполняются dpc функции, которые были поставлены в очередь при работе прерываний.
- завершения ввода/ вывода;
- отмены ввода / вывода;
- выгрузки — когда драйвер выгружается из системы и освобождает все занятые им ресурсы.