Драйверы устройств
В этой статье предоставляется краткий обзор типов драйверов и объясняется, как получить список драйверов, установленных и загруженных на вашей системе.
Драйверы устройств являются загружаемыми модулями режима ядра (имена файлов которых обычно имеют расширение .sys), обеспечивающими интерфейс между диспетчером ввода-вывода и соответствующим оборудованием.
Они запускаются в режиме ядра в одном их трех контекстов:
- в контексте пользовательского потока, инициировавшего функцию ввода-вывода;
- в контексте системного потока режима ядра;
- в результате прерывания (и поэтому вне контекста любого конкретного процесса или потока — какой бы процесс или поток ни был текущим при возникновении прерывания).
Как утверждалось в предыдущих статьях, драйверы устройств в Windows не работают с оборудованием напрямую, а вызывают для получения интерфейса с оборудованием функции в HAL. Драйверы обычно пишутся на C (иногда на C++) и поэтому, при правильном использовании подпрограмм HAL могут переноситься в виде исходного кода между архитектурами центральных процессоров, поддерживаемых Windows, а в виде исполняемого файла могут переноситься внутри архитектурного семейства.
Существует несколько типов драйверов устройств:
- Драйверы аппаратных устройств, управляющие (с помощью HAL) записью на физическое устройство или в сеть или чтением оттуда. Существует множество типов драйверов аппаратных устройств — драйверы шин, драйверы интерфейса с пользователем, драйверы запоминающих устройств большой емкости и т. д.
- Драйверы файловой системы, являющиеся драйверами Windows, которые принимают запросы на файловый ввод-вывод и транслируют их в запросы ввода-вывода, направляемые конкретному устройству.
- Драйверы фильтра файловой системы, обеспечивающие зеркалирование и шифрование дисков, перехваты ввода-вывода и некоторую дополнительную обработку перед передачей ввода-вывода на следующий уровень.
- Сетевые редиректоры и серверы, являющиеся драйверами файловой системы, передающими запросы ввода-вывода файловой системы машине, находящейся в сети, и получающими от нее аналогичные запросы.
- Драйверы протоколов, реализующие такие сетевые протоколы, как TCP/IP, NetBEUI и IPX/SPX.
- Драйверы потоковых фильтров ядра, собранные в цепочку для обработки сигналов потока данных, например, при записи или воспроизведении аудио- и видеопотоков.
Поскольку единственным способом добавления к системе написанного пользователям кода режима ядра является установка драйвера устройства, некоторые программисты пишут драйверы устройств просто для получения способа доступа к внутренним функциям или структурам данных операционной системы, недоступным из пользовательского режима (но документированным и поддерживаемым в WDK).
Например, многие утилиты из Sysinternals сочетают в себе приложение Windows GUI и драйвер устройства, используемый для сбора внутреннего состояния системы и вызова функций, доступных только в режиме ядра и недоступных из Windows API в режиме пользователя.