Драйвер

Дра́йвер (англ. device driver; в русской профессиональной и разговорной речи встречается вариант произношения «драйвера́») — специализированное программное обеспечение. Оно позволяет операционной системе или прикладным программам обращаться к функциям аппаратных компонентов компьютера[1].

Драйвер
Драйвер

Драйверы выступают посредником между аппаратным обеспечением и программами, обеспечивая стандартизированный способ взаимодействия. Без них операционная система не может корректно использовать возможности подключённых устройств[2].

Основные принципы работы

Драйвер управляет виртуальным образом устройства, воспринимаемым операционной системой как унифицированный объект. Он выполняет следующие операции[2]:

  • регистрация в системе при загрузке;
  • освобождение ресурсов при выгрузке;
  • открытие для взаимодействия как файла;
  • чтение и запись данных;
  • завершение работы;
  • специфичные команды ввода-вывода (например, SCSI-команда INQUIRY для запроса идентификационных данных устройства).
Операционная система
Операционная система

В UNIX-системах подобные запросы реализуются через системный вызов ioctl. В среде Windows — с помощью API-функции DeviceIoControl[3].

Архитектурные подходы

Драйверы разрабатываются под конкретные устройства и зависят от архитектуры операционной системы. Они обеспечивают низкоуровневую работу с регистрами контроллеров, памятью и прерываниями[2].

Принципы размещения драйверов определяются архитектурой ядра. В разных типах ядер они выполняются по-разному[4]:

  • в монолитных ядрах драйверы выполняются с тем же уровнем прав, что и системные функции[4];
  • в микроядрах драйверы запускаются как отдельные процессы, взаимодействующие с ядром через сообщения;
  • в Windows NT часть драйверов работает в режиме ядра (kernel-mode), а часть — в пользовательском режиме (user-mode). Для их разработки применяются Windows Driver Frameworks (KMDF и UMDF).
Размещение ядра
Размещение ядра

Драйверы пользовательского режима изолированы от памяти ядра. Это снижает риск системного сбоя. При этом взаимодействие с оборудованием может сопровождаться снижением производительности[2].

Разработка драйверов

Разработкой преимущественно занимаются инженеры компаний-производителей оборудования, имеющие доступ к закрытой технической документации. В отдельных случаях драйверы создаются независимыми разработчиками с использованием реверс-инжиниринга[2].

Операционные системы предоставляют разработчикам специализированные программные модели. Они определяют порядок разработки и использования драйверов[5]:

  1. В Windows применяются классовые драйверы и мини-драйверы (NDIS, WDM, WDDM и другие).
  2. Microsoft внедрила Windows Driver Frameworks (WDF), включающие UMDF (user-mode drivers) и KMDF (kernel-mode drivers).
  3. В macOS драйверы уровня ядра создаются через I/O Kit. В современных версиях применяется DriverKit для драйверов пользовательских пространств[6].
  4. В Linux драйверы могут быть встроены в ядро или подключаться как модули. В отдельных случаях часть функциональности возможно реализовать в пользовательском пространстве с использованием механизмов вроде UIO (Userspace I/O)[7].

В ранних версиях Linux список стандартных устройств формировался пакетом makedev. В современных системах управление устройствами осуществляется подсистемой udev, которая динамически создаёт и удаляет соответствующие файлы в каталоге /dev[8].

Классификация драйверов

К основным категориям относятся драйверы для принтеров, видеокарт, сетевых карт, звуковых карт, жёстких дисков и других накопителей, сканеров. Существуют специализированные модули для ТВ-тюнеров, камер, адаптеров беспроводной связи (Bluetooth, Zigbee, Z-Wave)[1].

Виртуальные драйверы представляют собой программные компоненты, имитирующие работу аппаратных устройств и применяемые в системах виртуализации (Xen). Они используются для реализации виртуальных сетевых интерфейсов (VPN), накопителей (iSCSI) и эмуляции оптических приводов (Daemon Tools).

В Windows существуют драйверы, не связанные напрямую с физическим оборудованием. Они используются в античитах для компьютерных игр или во вредоносных программах, которые обходят встроенные механизмы защиты.

Распространение и интеграция

Исторически драйверы поставлялись на отдельных носителях, чаще всего компакт-дисках, прилагаемых к оборудованию. Позднее появились интегрированные установочные пакеты, например VIA 4-in-1, автоматизировавшие установку нескольких драйверов. В настоящее время распространение осуществляется через сетевые обновления и официальные сайты производителей[9].

Современный подход получил название Board Support Package (BSP). Пакет включает драйверы устройств, дополнительные компоненты операционной системы и сервисные программы[10].

Безопасность драйверов

Драйверы работают на уровне ядра и обладают высоким уровнем привилегий, поэтому любые уязвимости в них могут быть критическими. Некоторые драйверы содержат ошибки или преднамеренные лазейки, что делает их удобной мишенью для злоумышленников. Например, в атаках типа BYOVD (Bring Your Own Vulnerable Driver) используются устаревшие, но подписанные драйверы с известными уязвимостями. Кроме того, массовые проблемы безопасности были выявлены в драйверах для Wi-Fi и Bluetooth (в том числе в рамках атак BlueBorne), в графических и принтерных драйверах.

Для минимизации подобных рисков применяются различные меры. В экосистеме Windows реализована блокировка уязвимых драйверов с помощью Windows Defender и других защитных механизмов. Одновременно развивается практика изоляции драйверов в виртуальных средах. В Linux активно внедряются автоматизированные системы разделения драйверов, и ежегодно в ядро вносятся значительные изменения, направленные на повышение его устойчивости и безопасности[1][10].

Примечания

  1. 1,0 1,1 1,2 Corbet J. Linux Device Drivers (англ.) / J. Corbet, A. Rubini, G. Kroah-Hartman. — 3rd ed. — Sebastopol: O'Reilly Media Inc., 2005. — P. 1–2. — 579 p. — ISBN 0-596-00590-3.
  2. 2,0 2,1 2,2 2,3 2,4 Tanenbaum, A. S. Modern Operating Systems (англ.) / A. S. Tanenbaum. — 4th ed.. — New Jersey: Pearson, 2014. — P. 63. — 1136 p. — ISBN 978-0-13-359162-0.
  3. Microsoft. DeviceIoControl (англ.). Microsoft Learn. Дата обращения: 19 сентября 2025.
  4. 4,0 4,1 Bovet, D. P. Understanding the Linux Kernel (англ.) / D. P. Bovet, M. Cesati. — Sebastopol: O’Reilly Inc., 2006. — P. 8–12. — 905 p. — ISBN 0-596-00565-2.
  5. DriverKit. Apple Developer Documentation. Дата обращения: 19 сентября 2025.
  6. The Userspace I/O HOWTO. The Linux Kernel. Дата обращения: 2025-19-09.
  7. Makedev (англ.). Debian Manpages. Дата обращения: 19 сентября 2025.
  8. Tanenbaum A. Operating Systems: Design and Implementation / A. Tanenbaum, A. Woodhull. — New Jersey: Pearson Prentice Hall, 2006. — P. 116–117. — 1088 p. — ISBN 0-13-0-13-142938.
  9. Raghavan P., Amol Lad, Sriram Neelakandan. Chapter 3. Board Support Package (англ.) // Embedded Linux System Design and Development. — CRC Press, 2005.
  10. 10,0 10,1 Security Servicing Criteria for Windows (англ.). Microsoft Security Response Center (MSRC). Дата обращения: 19 сентября 2025.