Открыть сервис

Драйвер клавиатуры

Драйвер клавиатуры — это системное программное обеспечение, обеспечивающее взаимодействие операционной системы (ОС) с физической клавиатурой или её виртуальным аналогом. Он преобразует электрические сигналы, возникающие при нажатии клавиш, в понятные для ОС и приложений коды (скан-коды), а также управляет параметрами ввода, такими как раскладка, скорость повторения и задержка. Драйвер является частью подсистемы ввода-вывода и работает на уровне ядра ОС или в пользовательском пространстве, в зависимости от архитектуры.

Функции и задачи

Основная функция драйвера клавиатуры — обеспечение корректного и своевременного ввода данных с клавиатуры. В число конкретных задач входят:

Архитектура и уровни работы

Драйвер клавиатуры может работать на разных уровнях стека ввода-вывода ОС:

Драйверы уровня ядра

В операционных системах семейства Windows драйвер клавиатуры (kbdclass.sys) является драйвером класса, работающим на уровне ядра. Он взаимодействует с портовым драйвером (например, i8042prt.sys для PS/2-клавиатур или hidclass.sys для USB-клавиатур) через интерфейсы WDM (Windows Driver Model). Драйвер класса получает скан-коды от портового драйвера, преобразует их в виртуальные коды и передаёт в подсистему ввода (win32k.sys), которая распределяет события по приложениям.

В Linux драйвер клавиатуры реализован в виде модуля ядра (например, atkbd для PS/2 или usbhid для USB). Он обрабатывает прерывания от контроллера клавиатуры и помещает скан-коды в буфер. Затем подсистема ввода (input subsystem) преобразует их в события, которые передаются в пользовательское пространство через файлы устройств /dev/input/event*.

Драйверы пользовательского пространства

В некоторых ОС (например, в Android или встраиваемых системах) часть функций драйвера клавиатуры может быть реализована в пользовательском пространстве. Это позволяет упростить разработку и тестирование, но увеличивает задержки ввода. Примером является использование библиотеки libinput в Linux для обработки событий от клавиатур, подключённых через Bluetooth.

Фильтр-драйверы

Фильтр-драйверы клавиатуры (например, клавиатурные шпионы или программы для переназначения клавиш) встраиваются в стек драйверов между драйвером класса и портовым драйвером. Они могут перехватывать, модифицировать или блокировать скан-коды до их передачи в ОС. В Windows такие драйверы часто используются для реализации макросов или блокировки определённых клавиш.

Типы драйверов клавиатуры

Драйверы клавиатуры можно классифицировать по типу поддерживаемого оборудования и способу подключения:

История развития

Первые клавиатуры (например, у компьютеров IBM PC) использовали простой последовательный протокол, и драйвер был минимальным — он считывал скан-коды из порта 60h и помещал их в буфер BIOS. В MS-DOS драйвер клавиатуры (KEYB.COM) отвечал за переключение раскладки и поддержку национальных символов.

С появлением Windows 95 драйверы стали более сложными: появилась поддержка USB, мультимедийных клавиш и Plug and Play. В Windows 2000/XP была введена модель WDM, которая стандартизировала взаимодействие драйверов. В современных версиях Windows (10, 11) драйверы клавиатуры поддерживают сенсорные панели, биометрические датчики и голосовой ввод.

В Linux развитие драйверов клавиатуры шло параллельно: от простого keyboard.c в ранних версиях ядра до модульной подсистемы ввода, которая поддерживает сотни различных моделей клавиатур. С 2010-х годов активно используется библиотека libinput, которая унифицирует обработку ввода для X11 и Wayland.

Проблемы и безопасность

Драйверы клавиатуры могут быть источником уязвимостей. Кейлоггеры (программы для перехвата нажатий клавиш) часто реализуются в виде фильтр-драйверов, которые перехватывают скан-коды до их обработки системой. Для защиты от этого в современных ОС применяются механизмы подписи драйверов (Driver Signature Enforcement в Windows) и изоляция драйверов в защищённой памяти (Virtualization-Based Security).

Другая проблема — некорректная обработка «горячего» подключения USB-клавиатур, что может приводить к сбоям системы. Для решения этой проблемы драйверы должны корректно обрабатывать события подключения/отключения устройств и освобождать ресурсы.

Примеры драйверов

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →