Что такое дрова в компьютере. Драйверы устройств. Программы для поиска драйверов

Здравствуйте, уважаемые читатели блога сайт. Девяностые годы давно позади, и технологический прогресс не стоит на месте, однако неопытных пользователей ПК можно встретить и по сегодняшний день.

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

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

Драйвер - что это такое

С английского языка слово driver переводится как «проводник ».

В действительности, драйвер - это некий посредник между операционной системой и устройством, предназначенный для их лучшего взаимодействия.

Если объяснить более официальным языком, то , который объясняет , как ей следует взаимодействовать с подключенным внешним или внутренним оборудованием.

Что произойдет, если на компьютере нет драйвера устройства

Невозможна без драйверов. Конечно, вы можете оперировать тем фактом, что после установки операционной системы можно с легкостью начать работу с ПК.

Но так происходит лишь потому, что драйверы для большинства основных устройств устанавливаются в автоматическом режиме вместе с Windows.

При подключении стороннего оборудования к компьютеру вы попросту не сможете с ним взаимодействовать без помощи программы-проводника, так как операционную систему необходимо «познакомить» с устройством .

Причем эта программа должна быть создана специально для конкретной детали ПК или модели стороннего оборудования.

Чтобы вам было более понятно то, о чем рассказывалось несколькими строчками выше, рассмотрим два примера :

  1. После установки Windows пользователь может видеть определенное изображение на экране благодаря автоматической инсталляции базового драйвера видеокарты. Но если нужна расширенная функциональность, придется искать основной драйвер.
  2. В Windows плохо поддерживаются звуковые карты. Если на нее не установлен драйвер, на устройстве попросту не будет звука. Конечно, это не так критично, как если бы на мониторе не выводилось изображение. Однако компьютер, который не способен воспроизводить звук, будет крайне ограниченным в функционале.

Как проверить уже установленные на ПК драйвера

Чтобы проверить наличие конкретного драйвера на ПК, нужно выполнить следующие шаги:


Как установить драйвера для имеющихся устройств

В большинстве случаев драйверы устанавливаются как обычные программы . Для этого достаточно просто запустить скачанный с официального сайта производителя устройства файл и шаг за шагом завершить процесс установки.

Вот и все, спустя пару минут можно наслаждаться полной функциональностью своего компьютера или подключенного к нему устройства. Однако, можно это сделать и из «Диспетчера устройств» (см. скриншот выше), как подробно описано в этом ролике:

Также есть способы пакетной установки всех необходимых драйверов, когда используют специально созданные для этого программы:

Какой способ лучше? Все зависит от ваших предпочтений и желанию погружаться в процесс. Пакетный способ самый быстрый, а первый вариант (файлы с официальных сайтов производителей устройств) хоть и долгий, но самый надежный и с более стабильным результатом. ИМХО.

Для каких устройств они необходимы

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

  1. видеокарта;
  2. звуковая карта;
  3. сетевая карта;
  4. материнская плата;
  5. веб-камера;
  6. МФУ и принтеров;
  7. клавиатура и мышь (если у них имеется расширенный функционал или дополнительные кнопки);
  8. большинство подключаемых устройств по USB: смартфоны, планшеты, электронные книги, MP3-плееры и многие другие.

Из всех внутренних устройств драйверов не бывает разве что только для оперативной памяти. Не нужны они и блоку питания, но это все равно не в счет, так как операционная система с ними никак не контактирует.

Если устройство не является сложным, то для него необходим базовый драйвер. Большинство из них устанавливается операционной системой автоматически .

Некоторые дополнительные драйверы для более сложных устройств пользователю приходится устанавливать самостоятельно.

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

Но что делать в случае, когда заветный диск потерян или утилиты не было и в помине? Перед неопытным пользователем возникает проблема, где взять драйвер .

Самое логичное решение - скачать его с официального сайта производителя.

Допустим, что у вас видеокарта NVIDIA GeForce MX150. Чтобы сделать так, чтобы графический адаптер работал на максимуме возможностей на вашем ПК, придерживайтесь следующей инструкции:

  1. Перейдите на официальный сайт NVIDIA .
  2. Зайдите во вкладку «Драйверы», введите все запрашиваемые данные для поиска нужного файла, в том числе и версию операционной системы на вашем персональном компьютере.
  3. Далее загрузите предлагаемый файл и приступайте к процессу установки, который был описан выше.

Аналогичным образом поступите для поиска всех необходимых драйверов для остальных устройств.

Помните, что только на сайте производителя конкретного устройства вы сможете найти самые актуальные драйверы последней версии и обезопасите себя от вирусов. Скачивать файлы со сторонних и малоизвестных ресурсов в таких целях крайне не рекомендуется .

Лучшие программы для обновления драйверов

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

  1. Driver Booster Free;
  2. DriverHub;
  3. DriverPack Solution;
  4. SlimDrivers;
  5. Snappy Driver Installer.

Вот и все, дорогие друзья. Теперь вы знаете о таком понятии, как драйвер, что он собой представляет и для каких целей используется. Надеюсь, что после прочтения этой статьи у вас больше не останется вопросов. А если они возникнут, то не стесняйтесь интересоваться в комментариях: если не я, то другие читатели смогут вам ответить.

Удачи вам! До скорых встреч на страницах блога сайт

Вам может быть интересно

Операционные системы - что это такое, виды ОС и какую выбрать Что такое компьютерная программа
Где можно бесплатно и безопасно скачать браузер Гугл Хром, Оперу, Яндекс браузер, Мазилу, Амиго, Орбитум, Тор и многие другие Что такое программное обеспечение и какие виды ПО бывают Что такое апгрейд вообще и как проводить upgrade компьютера
Аська и ее веб версия - старый, добрый бесплатный онлайн мессенджер с новыми возможностями
AppCoins - зарабатываем в интернете с телефона через мобильное приложение Устарел или не работает Adobe Flash Player - как обновить, удалить и установить бесплатный плагин флеш плеера последней версии
Файл - что это такое и как настроить file в Виндовс
Skype - что это такое, как его установить, создать аккаунт и начать пользоваться Скайпом Как бесплатно установить Гугл Хром, Яндекс Браузер, Оперу, Мазилу и Интернет Эксплорер на свой компьютер

Драйверы устройств обеспечивают интерфейс между ядром UNIX и аппаратной частью компьютера. Благодаря этому от остальной части ядра скрыты архитектурные особенности компьютера, что значительно упрощает перенос системы и поддержку работы различных периферийных устройств.

В UNIX существует большое количество драйверов. Часть из них обеспечивает доступ к физическим устройствам, например, жесткому диску, принтеру или терминалу, другие предоставляют аппаратно-независимые услуги. Примером последних могут служить драйверы /dev/kmem для работы с виртуальной памятью ядра /dev/null, представляющий "нулевое" устройство.

В процессе запуска системы ядро вызывает соответствующие процедуры инициализации установленных драйверов. Во многих версиях UNIX эти процедуры выводят на консоль сообщение о том, что драйвер найден, и инициализация прошла успешно, а также параметры драйвера и устройства.

Типы драйверов

Драйверы различаются по возможностям, которые они предоставляют, а также по тому, каким образом обеспечивается к ним доступ и управление. Можно рассматривать три основные типа драйверов:

Символьные.

Этот тип драйверов обеспечивает работу с устройствами с драйверы побайтовым доступом и обменом данными. К таким устройствам можно отнести модемы, терминалы, принтеры, манипуляторы мышь и т. д.

Доступ к таким драйверам не включает использование буферного кэша, таким образом ввод и вывод как правило не буферизуется. При необходимости буферизации для символьных драйверов обычно используется подход, основанный на структурах данных, называемых clist.

Блочные драйверы

Этот тип драйверов позволяет производить обмен данными с устройством фиксированными порциями (блоками).

Например, для жесткого диска данные можно адресовать и, соответственно, читать только секторами, размер которых составляет несколько сотен байтов. Для блочных драйверов обычно используется буферный кэш, который и является интерфейсом между файловой системой и устройством.

Хотя операции чтения и записи для процесса допускают обмен данными, размер которых меньше размера блока, на системном уровне это все равно приводит к считыванию всего блока, изменению части его данных и записи измененного блока обратно на диск.

Драйверы низкого уровня (raw drivers)

Этот тип интерфейса блочных драйверов позволяет производить обмен данными с блочными устройствами, минуя буферный кэш. Это, в частности, означает, что устройство может быть адресовано элементами, размер которых не совпадает с размером блока.

Обмен данными происходит независимо от файловой подсистемы и буферного кэша, что позволяет ядру производить передачу непосредственно между пользовательским процессом и устройством, без дополнительного копирования.

На рис. 5.1 приведена упрощенная схема взаимодействия драйверов устройств с другими подсистемами операционной системы UNIX.

Жесткий диск Гибкий диск Терминал

Рис. 5.1. Драйверы устройств UNIX

Не все драйверы служат для работы с физическими устройствами, такими как сетевой адаптер, последовательный порт или монитор. Часть драйверов служат для предоставления различных услуг ядра прикладным процессам и не имеют непосредственного отношения к аппаратной части компьютера. Такие драйверы называются программными или драйверами псевдоустройств. Можно привести несколько примеров псевдоустройств и соответствующих им программных драйверов:

/dev/mem /dev/nulf

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

Обеспечивает доступ к разделу исполняемого файла ядра, содержащего таблицу символов. Совместно с драйвером /dev/kmem обеспечивает удобный интерфейс для анализа внутренних структур ядра.

Обеспечивает доступ к физической памяти компьютера.

Является "нулевым" устройством. При записи в это устройство данные просто удаляются, а при чтении процессу возвращается 0 байтов. Примеры использования этого устройства рассматривались в главе 1, когда с помощью /dev/null мы подавляли вывод сообщений об ошибках.

Обеспечивает заполнение нулями указанного буфера. Этот драйвер часто используется для инициализации области памяти.

Драйвер устройства адресуется старшим номером (major number) устройства. Напомним, что среди атрибутов специальных файлов устройств, которые обеспечивают пользовательский интерфейс доступа к периферии компьютера, это число присутствует наряду с другим, также имеющим отношение к драйверу, -- младшим номером (minor number). Младший номер интерпретируется самим драйвером (например, для клонов, оно задает старшее число устройства, которое требуется "размножить"). Другим примером использования младших номеров может служить драйвер диска. В то время как доступ к любому из разделов диска осуществляется одним и тем же драйвером и, соответственно, через один и тот же старший номер, младший номер указывает, к какому именно разделу требуется обеспечить доступ.

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

Этот интерфейс различен для блочных и символьных устройств. Ядро содержит коммутаторы устройств двух типов: bdevsw для блочных и cdevsw для символьных устройств. Ядро размещает отдельный массив для каждого типа коммутатора, и любой драйвер устройства имеет запись в соответствующем массиве. Если драйвер обеспечивает как блочный, так и символьный интерфейсы, его точки входа будут представлены в обоих массивах.

Типичное описание этих двух массивов имеет следующий вид (назначение различных точек входа мы рассмотрим далее в этом разделе):

struct bdevsw { int (*d open)(); int (*d_close) () ; int (*d_strategy)(); int (*d_size) (); int (*d_xhalt) () ;

struct cdevsw {

int (*d_open) ();

int (*d^_close) () ;

int (*d_read) <) ;

int (*d_write) ()

int (*d_ioctl) ()

int (*d_xpoll) ()

int {*d_xhalt) ()

struct streamtab *d_str;

} cdevsw; Ядро вызывает функцию open {) требуемого драйвера следующим образом:

(*bdevsw.d_open)(dev, ...);

передавая ей в качестве одного из параметров переменную dev (типа dev t), содержащую старший и младший номера. Макрос getmajor() служит для извлечения старшего номера из переменной dev. Благодаря этому драйвер имеет возможность определить, с каким младшим номером была вызвана функция open (), и выполнить соответствующие действия.

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

В названиях точек входа драйвера используются определенные соглашения. Поскольку в ядре системы одновременно присутствует большое количество различных драйверов, каждый их них должен иметь уникальное имя во избежание проблем при компиляции (точнее, при редактировании связей) ядра. Каждый драйвер имеет уникальное двухсимвольное обозначение, используемое в качестве префикса названий функций. Например, драйвер виртуальной памяти ядра /dev/kmem имеет префикс mm, таким образом функции этого драйвера будут иметь названия mmopen () , mmclose(),mmread() И mmwrite() .

В табл. 5.1 приведены некоторые точки входа, общие для различных типов драйверов, а символами хх, с которых начинается имя каждой функции, обозначен уникальный префикс драйвера. Стандартные точки входа драйвера отличаются для разных версий UNIX. Например, некоторые версии имеют расширенный коммутатор блочных устройств, включающий такие функции, как xxioctl (), xxread () и xxwrite (). В некоторых версиях включены точки входа для инициализации и сброса шины данных.

Таблица 5.1. Типичные точки входа в драйвер устройства

Точка входа

Сим-вольный

Низкого ный уровня

Назначение

Вызывается при каждой опера-

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

Вызывается, когда число ссылок на данный драйвер становится равным нулю, т. е. ни один из процессов системы не работает с устройством (не имеет открытым соответствующий файл устройства). Может вызывать отключение физического устройства. Например, драйвер накопителя на магнитной ленте может перемотать ленту в начало

Производит чтение данных от устройства

Является общим интерфейсом

управления устройством. Драйвер может определить набор команд, которые могут быть переданы ему, например с помощью системного вызова

Вызывается при поступлении

прерывания, связанного с данным устройством. Может выполнить копирование данных от устройства в промежуточные буферы, которые затем считываются функцией xxread () по запросу прикладного процесса.

Производит опрос устройства.

Обычно используется для устройств, не поддерживающих прерывания, например, для определения поступления данных для чтения

Вызывается для останова драй-

вера при останове системы или при выгрузке драйвера.

Общая точка входа для операций блочного ввода/вывода. Название функции говорит о том, что устройство может обеспечивать собственную стратегию обработки поступающих запросов, например, изменять их порядок для повышения производительности ввода/вывода. Если устройство занято, функция помещает запросы в очередь. В этом случае фактический ввод/вывод инициирует функция обработки прерывания, которая вызывается, когда устройство закончит предыдущую операцию ввода/вывода

Ядро вызывает те или иные функции драйвера в зависимости от запроса. Например, если процесс выполняет системный вызов read(2) для специального файла символьного устройства, ядро вызовет функцию xxread () для соответствующего символьного драйвера. Если же процесс запрашивает ту же операцию для обычного дискового файла, ядро вызовет процедуру xxstrategy() для блочного драйвера, обслуживающего данную файловую систему.

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

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

О Ввод/вывод. Запрос на операцию ввода/вывода может быть инициирован как прикладным процессом, так и некоторыми подсистемами ядра, например, подсистемой управления памятью.

О Обработка прерываний. Ядро вызывает соответствующую функцию драйвера для обработки прерывания, поступившего от устройства (если устройство способно генерировать прерывания).

П Специальные запросы. Ядро вызывает соответствующую функцию драйвера для обработки специальных команд, полученных с помощью системного вызова ioctl(2).

П Реинициализация/Останов. Некоторые типы аппаратных архитектур могут требовать сброса и реинициализации устройства. Определенные функции драйвера также вызываются при останове операционной системы.

На рис. 5.2 и 5.3 приведены схемы доступа к драйверам символьного и блочного устройств.

Как видно из рисунков, схема обработки запроса ядром UNIX различна для символьных и блочных устройств.

При обсуждении точек входа драйверов устройств следует иметь в виду, что большинство функций драйвера, отвечающих за передачу данных, осуществляют копирование информации из адресного пространства ядра, в котором находится сам драйвер, в адресное пространство задачи. Когда ядро вызывает функцию драйвера, все действия выполняются в системном контексте процесса. Однако схема вызова функций может быть различной:

П Функция может быть вызвана по запросу процесса. Например, если процесс выполняет системный вызов read(2), ядро вызывает соответствующую точку входа драйвера xxread(), обеспечивающего работу с файлом. В этом случае говорят, что функция имеет контекст задачи.

П Функция может быть вызвана другой подсистемой ядра операционной системы. Например, для блочного драйвера функция xxstrategy () может быть вызвана страничным демоном, для сохранения страниц во вторичной памяти (как правило, на жестком диске). Поскольку страничный демон представляет собой системный процесс, выполняющийся только в контексте ядра, функция xxstrategy () в этом случае имеет системный контекст.

Если функция вызывается в процессе обработки прерывания, то она имеет контекст прерывания -- специальный вид системного контекста. Функции драйвера, отвечающие за обработку прерывания, например xxintr () имеют этот тип контекста.

Рис. 5.3.

Различия в контексте и причинах вызова тех или иных функций драйвера позволяют представить драйвер устройства состоящим из двух частей: верхней части (top half) и нижней части (bottom half). Функции верхней части драйвера имеют синхронный характер, т. е. вызываются по определенным запросам прикладного процесса и выполняются в его контексте. Таким образом, для этих функций доступно адресное пространство и u-area процесса, и при необходимости эти функции могут перевести процесс в состояние сна (вызовом функции sleep (} ядра). Функции ввода/вывода и управления принадлежат верхней части драйвера.

Вызов функций нижней части носит асинхронный характер. Например, момент вызова функции обработки прерываний нельзя предугадать, и ядро не может контролировать, когда эта функция будет вызвана. Выполнение таких функций происходит в контексте ядра и обычно не имеет никакого отношения к контексту текущего процесса. Таким образом, функции системного контекста не имеют права адресовать структуры данных текущего процесса, например его u-area, а также не могут перевести процесс в состояние сна, поскольку это заблокирует процесс, не имеющий непосредственного отношения к работе драйвера.

Две части драйвера требуют синхронизации. Например, в случае, когда функции обеих частей используют одну и ту же структуру данных, функция верхней части при выполнении должна заблокировать прерывания на период работы с "разделяемой" областью памяти. В противном случае, прерывание может поступить в тот момент, когда целостность структуры данных нарушена, что приведет к непредсказуемым результатам.

Все представленные выше функции, за исключением xxhalt (), xxpoll () и xxintr {), принадлежат верхней части драйвера. Функция xxhalt {) вызывается ядром при останове системы и, таким образом, имеет системный контекст, не связанный с контекстом прикладного процесса.

Функция xxpoll () обычно вызывается при обработке ядром прерывания таймера для всех устройств, указанных как опрашиваемые. Это необходимо, в частности, для устройств, которые не могут или "не хотят" использовать аппаратные прерывания. Вместо этого xxpoll () может использоваться для эмуляции прерываний, например вызывая функцию xxintr (} на каждый n-ный тик системного таймера. Поэтому и функция xxpoll () и функция обработки прерывания xxintr () не могут рассчитывать на контекст прикладного процесса. В большинстве версий UNIX функции опроса и обработки прерываний вызываются не через коммутатор устройств, а через специальные таблицы ядра.

В UNIX SVR4 определены две дополнительные точки входа -- init () и start (). Драйвер регистрирует эти функции в таблицах ядра io init и io_start. Код начальной загрузки системы запускает функции xxinit () перед инициализацией ядра, а функции xxstart () сразу же после инициализации.

Как мы знаем, на аппаратном уровне современный компьютер состоит из функциональных узлов, представляющих собой те или иные электронные компоненты. Широкому кругу пользователей персональных компьютеров знакомы такие функциональные блоки как: процессор, память, видеокарта, звуковая карта, жесткий диск, контроллер ввода-вывода (обеспечивающий работу клавиатуры, мыши, джойстика, USB-носителей (флешек)), принтер, сканер и некоторые другие. На физическом уровне данные устройства взаимодействуют между собой посредством специальных шин и протоколов, создавая совокупностью своего взаимодействия симбиоз операций, который, в общем случае, характеризует функционирование компьютера. Но разве компьютер представляет собой только лишь набор электронных компонентов? Конечно же нет, ведь один из основных аппаратных модулей, центральный процессор, спроектирован для выполнения машинных инструкций, из последовательностей которых, как мы знаем, состоят программы, в свете этого было бы уместно упомянуть еще об одном уровне - программном. Теперь давайте вернемся в не столько далекое прошлое; на заре компьютерной эры код программ (которые часто писались непосредственно в машинных кодах/на низкоуровневых языках) мог легко взаимодействовать с аппаратурой напрямую, поскольку аппаратная архитектура была относительно простой. Однако со временем технологии развивались, аппаратный и программный уровни эволюционировали взаимосвязано, и первый пришел к появлению большого многообразия устройств, а второй к появлению огромного разнообразия программных модулей, обусловивших, в дальнейшем, появление операционных систем. Операционная система явилась ключевой вехой в истории развития компьютерной индустрии, поскольку именно она, среди прочего, выполняла роль связующего звена, своеобразного координатора (диспетчера), обеспечившего взаимодействие между устройствами и программами: принимала запросы от программного слоя (например, пользовательских программ) на обмен данными с тем или иным устройством и наоборот, то есть фактически выполняла роль сопряжения между аппаратной и программной частями. Операционные системы тоже не стояли на месте, и если по началу взаимодействие операционной системы с аппаратурой компьютера было относительно простым, то по мере усложнения архитектуры и введения новых аппаратных возможностей, усложнялась и структура операционной системы. На протяжении всего времени развития операционных систем, разработчики пытались создать код, обеспечивающий полноценное взаимодействие с максимально возможным количеством имеющимся на рынке аппаратных устройств. Тем не менее, подобный подход, по мере усложнения архитектуры персональных компьютеров x86, привел к появлению концепции обособленного программного слоя, носящего название драйвер, ответственного за взаимодействие с тем или иным классом/типом устройств. Концепция драйвера оказалась настолько удачной, что помимо основного направления - поддержки физических устройств, была экстраполирована и на некоторые категории логических/виртуальных устройств. В данной статье мы будем рассказывать про то, что же из себя представляет драйвер Windows .

Теория

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

Режимы работы процессора

Внутренняя структура любой операционной системы базируется на аппаратных особенностях платформы, на которой она работает. Центральным звеном является процессор, у процессоров архитектуры x86-64 имеются несколько режимов работы:

  • Реальный режим (Real mode);
  • Виртуальный режим (Virtual mode);
  • Защищенный режим (Protected mode);
  • Длинный режим (Long mode).

На заре эры развития персональных компьютеров архитектуры x86, процессор работал в реальном режиме. Тем не менее, реальным режим постепенно ушел в прошлое, поскольку имел ряд особенностей, делающих невозможным дальнейшее развитие технологий: 16-битную шину данных и 20-битную шину адреса (ограничение по адресации), сегментную адресацию с размерами сегментов в 64 килобайта (неудобство использования адресного пространства), отсутствие разграничений доступа к адресному пространству. С целью снятия существовавших ограничений был разработан защищенный режим, который предоставлял ряд важных для развития операционных систем особенностей: "многозадачность", механизм защиты (доступ к привилегированным командам), обеспечивающий контроль доступа различных участков кода (программ) друг к другу, модель виртуальной памяти. В защищенном режиме процессоров Intel архитектуры x86 реализованы так называемые кольца защиты или уровни привилегий. Всего их четыре: 0 (наиболее привилегированный), 1, 2 и 3 (наименее привилегированный). Уровни привилегий призваны защитить код режима ядра от пользовательских программ и пользовательских программ друг от друга, поскольку это может привести к нарушению работоспособности. Однако операционная система Windows не использует все перечисленные уровни, в ней задействованы лишь два из них: 0-й и 3-й.
Для наглядности понимания этого приведем упрощенную схему взаимодействия компонентов Windows:

Как вы видите, внутренняя среда операционной системы Windows разделена на две части и поддерживает два режима выполнения:

  • Пользовательский режим - непривилегированный режим, сопоставленный с аппаратным 3-им кольцом защиты процессора;
  • Режим ядра - привилегированный режим, сопоставленный с аппаратным 0-м кольцом защиты процессора;

В этой особенности состоит самый, пожалуй, важный момент понимания внутреннего строения Windows: глобально операционная система как бы поделена на две основных части: пользовательский режим и режим ядра.

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

  • Изолированными (не пересекающимися) виртуальными адресными пространствами: пространство пользовательского режима занимает нижнюю часть (адреса с по), пространство режима ядра занимает верхнюю (адреса с по);
  • Разными привилегиями доступа кода к ресурсам (памяти, процессору, устройствам и прч).

В пользовательском режиме выполняются следующие процессы:

Подсистема Описание
Процессы обеспечения работоспособности системы (System Support Processes)
  • Процесс входа в систему Winlogon (winlogon.exe )
  • Процесс локального сервера проверки подлинности lsass (lsass.exe )
  • Процесс диспетчера управления службами (services.exe )
  • Процесс диспетчера сессий (smss.exe )
  • Процесс консоли (conhost.exe )
  • Процесс диспетчера локальных сессий (lsm.exe )
  • . . .
Процессы служб/сервисов (Service Processes)
  • Хост-процесс для служб (svchost.exe )
  • Процесс диспетчера очереди печати (spoolsv.exe )
  • Процесс управления службой WMI (winmgmt.exe )
  • . . .
Приложения (Applications)
  • Пользовательские приложения (все приложения, не входящие в остальные категории).
  • Диспетчер задач (taskmgr.exe )
  • Проводник (explorer.exe )
  • Консоль управления (mmc.exe )
  • . . .
Подсистемы окружения (Environment Subsystems)
  • Подсистема Win32 (csrss.exe , kernel32.dll , advapi32.dll , user32.dll , gdi32.dll , ...)
  • Подсистема Linux (lxss.sys , lxcore.sys )
  • Подсистема POSIX (psxss.exe , psxrun.exe , posix.exe , psxdll.dll )
  • Подсистема OS/2 (os2.exe , os2ss.exe , os2srv.exe )
  • Подсистема WOW/WOW64 (wow64win.dll , wow64.dll , wow64cpu.dll )
  • . . .
Интерфейс к функциям ядра
  • Обеспечивает передачу управления в ядро для функций, которым это необходимо. Поддерживается библиотекой ntdll.dll

В режиме ядра выполняются:

Подсистема Описание
Исполнительная система (Executive)
  • Диспетчер ввода-вывода
  • Диспетчер процессов
  • Диспетчер потоков
  • Диспетчер виртуальной памяти
  • Диспетчер объектов
  • Диспетчер PnP
  • Диспетчер питания
  • Диспетчер окон
  • . . .
Ядро (Kernel) инициализация критических для системы драйверов этапа загрузки, межпроцессорная синхронизация, планирование и диспетчеризация процессов/потоков/прерываний, обработка/диспетчеризация исключений/ошибок и некоторые другие функции (ntoskrnl.exe , ntkrnlmp.exe , ntkrnlpa.exe , ntkrpamp.exe ).
Драйверы устройств (Device Drivers) драйверы физических/логических/виртуальных устройств: драйверы файловых систем, сети, дисков и прч.
Оконная/графическая подсистема (Windowing And Graphics System) Подсистема поддержки окон и графики, обеспечивающая поддержку функций графического пользовательского интерфейса (Graphic User Interface, GUI). (win32k.sys )
Уровень абстрагирования от оборудования (Hardware Abstraction Layer, HAL) обеспечивает независимость от аппаратной части платформы, изолирует компоненты ядра от специфики аппаратного обеспечения. (hal.dll )

Поскольку любая операционная система попросту обязана уметь работать с аппаратными средствами, в дистрибутиве (комплекте установки/системных файлах) присутствуют драйверы ключевых компонентов аппаратного обеспечения, без которых система буквально лишится доступа к аппаратной части со всеми вытекающими из этого проблемами: не сможет функционировать или вовсе не пройдет процедуру собственной установки. Представлены эти "внутренние" драйверы в виде так называемой встроенной библиотеки драйверов, видоизменяющейся по составу от версии к версии, в зависимости от этапов эволюционирования аппаратного обеспечения и рыночных тенденций. Драйвера из состава данной библиотеки, при необходимости, устанавливаются на этапе инсталляции операционной системы в зависимости от обнаружения (идентификации) в компьютере тех или иных устройств. В общем случае, во время инсталляции, код модуля обнаружения оборудования выполняет определение установленных в компьютере устройств и проверяет в своей библиотеке наличие сопоставимых драйверов. Для тех устройств, для которых присутствуют системные драйвера, производится установка в автоматическом (фоновом) режиме. Тем самым "на выходе", после инсталляции операционной системы, мы можем получить минимально-необходимый для функционирования набор системных драйверов, который позволяет организовать работоспособную начальную рабочую среду. Но стоит помнить, что ограничиваться встроенными в дистрибутив драйверами не стоит, поскольку для полноценного функционирования большинства устройств могут потребоваться драйвера, предоставляемые производителем устройства.

Остается открытым вопрос: действительно все компоненты режима ядра взаимодействуют с оборудованием исключительно через уровень HAL? имеются ли исключения? В Сети во многих источниках приводятся схемы, на которых драйвера графического адаптера взаимодействуют с видеокартами как бы "напрямую", в обход HAL. Насколько я помню, графике в некоторых версиях Windows отводился наивысший приоритет, поэтому она была выделена в отдельную категорию устройств, работающую напрямую с графическим адаптером, и сделано это с целью ускорения графического интерфейса системы.

Уровни запросов прерываний (IRQL)

Среди ключевых внутренних механизмов, определяющих функционирование операционной системы Windows, имеется достаточно важная для понимания принципов работы драйверов тема, обойти которую стороной вряд ли получится. Механизм этот носит название уровня запросов прерываний (Interrupt Request Level, IRQ Level, IRQL) и достаточно сложен для понимания, поэтому углубленное его изучение выходит далеко за рамки излагаемого материала, однако в данной статье мы предпримем попытку краткого изложения (ну а в будущем выделим под него отдельную статью). Откровенно говоря, сам я до сих пор путаюсь в концепции IRQL, поэтому буду излагать собственное понимание планомерно, шаг за шагом, с опорой на знания, полученные на каждом из этапов.
Термин прерывание всегда ассоциировался у меня с реальным режимом работы процессора, перенося во времена операционной системы MSDOS, в которой все было достаточно просто: существовал набор из 256 прерываний, доступных через таблицу векторов прерываний. Часть этих прерываний были аппаратными, соответственно генерировались самостоятельно по каким-либо внешним аппаратурным событиям, другие же являлись программными, соответственно могли вызываться из кода приложений. Записи в таблице прерываний могли быть переопределены, то есть вектор обработчика прерывания был доступен для изменения по своему усмотрению на собственную процедуру обработки. Таких понятий как уровень запросов прерываний не существовало, все было просто и понятно. Однако, с эволюцией процессоров и операционных систем появился сначала защищенный режим, а затем уже и Windows, с этого момента все начало стремительно усложняться.
Буквально внезапно, в первых же версиях Windows 95/NT, появилась какая-то таблица (состоящая из 32 уровней запросов прерываний), уровни которой градируются от самого низкого 0 (passive) до самого высокого 31 (high):

Имя Класс Назначение Уровень Intel x86-64
HIGH Аппаратный Наивысший уровень. Немаскируемое прерывание и другие типы. 31
POWER Аппаратный События сбоя питания 30
IPI Аппаратный Межпроцессорный сигнал. Сигналы межпроцессорного взаимодействия. 29
CLOCK Аппаратный Такт системного таймера 28
PROFILE Аппаратный Контроль производительности. Таймер профилирования ядра (механизм измерения производительности системы). 27
DEVICE Аппаратный DIRQL (Devices IRQL). Аппаратные прерывания устройств. 3-26
DISPATCH Программный Операции планировщика/отложенные вызовы процедур (DPC). 2
APC Программный Асинхронные вызовы процедур. 1
PASSIVE Программный Пассивный уровень. Нет прерываний. Обычный уровень выполнения кода режима пользователя 0

Как можно заметить, в приведенной таблице присутствует очень интересная особенностью: вместе сведены и программные и аппаратные уровни (0-2 это программные уровни, а с 3-31 это аппаратные).

IRQL - собственный программный атрибут, введенный разработчиками Microsoft. Никакой аппаратной поддержки со стороны процессора у этого механизма нет. Система самостоятельно управляет всеми типами возникающих прерываний через механизм отображения уровней прерывания аппаратного контроллера прерываний (PIC) и собственных программных уровней в единую аппаратно-независимую таблицу уровней прерываний.

Из этого утверждения следует, что модель собственная, программная, и уровни в ней не привязаны к какой-либо спецификации оборудования, это позволяет системе собрать в единую иерархию приоритетов аппаратные и не аппаратные типы прерываний. Низшие (не аппаратные/программные) уровни IRQL (PASSIVE, APC, DPC/DISPATCH) используются для синхронизации программных подсистем операционной системы: запуска операций планирования, таких как переключение потоков или обработка завершения ввода/вывода. Давайте рассмотрим их подробно:

  • 0-й (низший) приоритет IRQL (PASSIVE): является типовым уровнем запроса прерываний, на котором производится работа в операционной системе, как в пользовательском режиме, так и в режиме ядра. Код (программа), выполняющийся на данном уровне, может быть элементарно прерван (вытеснен) всем чем угодно: например потоки, исполняющиеся с уровнем IRQ PASSIVE подвергаются вытеснению планировщиком по истечении кванта времени, выделенного для них.
  • Уровни IRQL APC и DPC/DISPATCH - программные уровни прерываний, связанные с планировщиком.
  • 1-й уровень IRQL (APC): На этом уровне выполняются так называемые APC-процедуры, то есть процедуры, выполняющиеся асинхронно в контексте конкретного потока, другими словами организующие асинхронный ввод-вывод, или обращающиеся/ждущие освобождения каких-либо (внешних, глобальных) системных объектов. Использование APC-функций (например WaitForSingleObjectEx) в коде не приводит к мгновенному выполнению функции, вместо этого поток (в контексте которого функция выполняется) переходит в специальный статус и генерируется программное прерывание APC, вызов функции ставится во внутреннюю очередь. В следующий раз, когда подошло время выполняться этому потоку, то запланированная APC-функция выполняется на уровне APC. Потоки, работающие на уровне APC, соответственно не получают запросы своего же уровня АРС, которые система использует для операций завершения ввода/вывода.
  • 2-й уровень IRQL (DPC/DISPATCH):
    • используется для обработки отложенных вызовов процедур (Deferred procedure call, DPC): Отложенные вызовы процедур - это подпрограммы обратного вызова, которые отложены для выполнения до того момента, когда произойдет переключение на уровень IRQL DISPATCH; Обычно DPC запрашиваются с высоких уровней IRQL с целью осуществления дополнительной работы, для которой затрачиваемое процессорное время не критично. Это довольно важная для производительности стадия, и сейчас я объясню почему. Драйверы устройств стараются выполнять минимально-возможное количество операций внутри собственных подпрограмм обработки прерывания (ISR), чтобы не занимать продолжительное время на уровне DIRQL, тем самым не блокируя остальные прерывания и не тормозя, в итоге, всю систему.

      Чем выше уровень IRQL, тем меньше возможности процесса. Это побуждает разработчиков на высоком уровне IRQL выполнять только самые необходимые операции, а все остальные действия производить на низком.

      Если драйвер понимает, что требуется выполнение дополнительной работы, которая занимает существенное процессорное время, то он запрашивает DPC и перекладывает на него эту задачу. Когда уровень IRQL опускается до DISPATCH, происходит обратный вызов отложенной функции драйвера, которая и выполняет оставшуюся часть обработки. Реализуя подобный алгоритм на уровне IRQL DISPATCH, драйвер проводит на уровне DIRQL меньшее количество времени, и соответственно, уменьшает время задержки на обработку собственного прерывания, тем самым освобождая его для других устройств системы.

    • используется для выполнения задач планировщика: Как вы знаете, в операционных системах линейки Windows NT реализована вытесняющая многозадачность, которая означает, что каждому процессу, выполняющемуся в операционной системе, выделяется для выполнения определенное время. Поскольку IRQL планировщика потоков и DPC равен 2, то он выше приоритета пользовательских потоков (исполняемых на уровне 0). В свою очередь приоритет планировщика ниже чем приоритет аппаратных прерываний (прерываний от устройств), то есть он может быть прерван аппаратными прерываниями.

Хорошо, но я так и не понял, почему нельзя было отказаться от всех этих уровней и сделать "плоскую" модель очередей, либо выполнять все эти типы задач по мере поступления? Давайте смоделируем рабочую ситуацию:
представим какой-либо код, например небольшую программу, написанную "на коленке". Вот мы запустили её на выполнение, соответственно в системе сформировался процесс для нашей программы, в контексте которого начал выполняться основной поток. Типовой поток (режима пользователя или режима ядра) исполняется на самом низшем уровне IRQL PASSIVE. На протяжении всего времени выполнения потока, часы (микросхема таймера) периодически генерирует собственные прерывания для отсчета временных интервалов, которые используются для указания операционной системе о прохождении заданного промежутка времени. Процедура обработки прерывания часов выполняется на уровне IRQL CLOCK, который (если посмотреть в таблицу) выше по приоритету большинства уровней: и уровня DISPATCH, на котором выполняется планировщик, и уровня PASSIVE, на котором выполняется наша программа. Таким образом таймер постоянно вытесняет работу и планировщика и нашей программы. С каждым переданным тиком таймера, процедура обработки прерывания таймера уменьшает остающийся у выполняющегося в данный момент нашего пользовательского потока квант времени. В момент, когда квант времени выполняющегося потока уменьшается до нуля, программа обработки прерывания часов генерирует прерывание уровня DISPATCH, тем самым вызывая запуск планировщика для выбора им следующего потока для выполнения. По факту генерирования прерывания уровня DISPATCH, процедура обработки прерывания таймера заканчивает исполнение своего кода и управление возвращается ядру системы. Ядро находит в очереди запросов следующее прерывание с наиболее приоритетным уровнем, находящееся в режиме ожидания. Каждое прерывание обслуживается по очереди. Когда все прерывания выше уровня DISPATCH обслужены, то выполняется процедура обработки прерывания уровня DISPATCH. Эта программа обработки прерывания обрабатывает список DPC и затем вызывает планировщик. Планировщик обнаруживает, что квант времени текущего потока исчерпан, то есть уменьшен до нуля, после чего Планировщик выполняет алгоритм планирования для выбора следующего потока на выполнение. Код поставленного на выполнение потока будет выполнен когда система опустится на уровень IRQL PASSIVE.
Таким вот образом реализуется приоритеты, и, соответственно, вытесняющая многозадачность. Теперь представьте, что вы уберете из системы иерархию уровней запросов прерываний, как в этом случае будет вести себя система? В этой ситуации было бы непонятно что и когда выполнять, система выполняла бы все поступающие задачи в порядке очереди, что привело бы к тому, что потоки запросто могли бы вытеснить планировщик и тем самым вообще разрушить или полностью вывести из стоя вытесняющую многозадачность, что повлекло бы за собой непредсказуемую работу ОС. Таким образом:

IRQL - уровень аппаратно-программной приоритизации, применяемый для синхронизации в операционных системах семейства Windows, то есть уровни IRQL являются основным методом, используемым для выстраивания по приоритетам всех действий, выполняемых в операционной системе Windows на протяжении цикла работы.

соответственно:

IRQL указывает приоритет кода, исполняющегося на процессоре по отношению к прерываниям и другим асинхронным (внезапным) событиям.

Назначение уровней IRQL в системе следующие:

  1. Маскировка: повышение уровня прерывания позволяет отрезать (замасировать) низлежащие уровни аппаратных прерываний на контроллере PIC. Это позволяет на время проигнорировать прерывания, возникающие на более низких уровнях, тем самым выигрывая время на выполнение процедуры обработки аппаратного прерывания на данном уровне.
  2. Аппаратная синхронизация: синхронизация данных между потоками, выполняющимися на разных процессорах/ядрах в многопроцессорной системе.
  3. Программная синхронизация: для определения когда различные APC/DPC-процедуры могут быть обслужены, для определения когда могут быть обслужены приложения пользовательского режима.

Тем самым, на глобальном уровне механизм IRQL позволяет подпрограмме операционной системы:

  • Управлять повторной входимостью (реентерабельность)
  • Гарантировать, что она может продолжать работу без приоритетного прерывания (вытеснения) некоторыми другими действиями.

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

Ну хорошо, а как это воздействует на драйвера? Мы знаем, что драйвера могут быть пользовательского режима и режима ядра, соответственно, выполняются пользовательском режиме и в режиме ядра. Отсюда следует, что:

Код драйвера может выполняться на разных уровнях IRQL.

И отсюда следует два достаточно важных вывода:

  1. Код драйвера является вытесняемым и прерываемым. Как и любой другой код в системе, он может быть прерван в любой момент по окончании выделенного кванта времени;
  2. Код драйвера должен использовать те или иные наборы системных функций в зависимости от уровня IRQL, на котором он выполняется.

Представьте ситуацию, когда код драйвера выполняется на низком уровне IRQL, модифицирует какой-либо объект (например, файл file.txt ), затем другой код на более высоком уровне IRQL внезапно прерывает его выполнение и модифицирует тот же файл file.txt другими данными. Когда управление вернется к нашему драйверу, он продолжит модификацию файла своими данным, тем самым затерев данные, поступившие от другого источника. Таким образом файл войдет в рассогласованное состояние. Для решения подобных проблем были введены различные системные объекты синхронизации. Для того, что бы код уровня ядра мог модифицировать определенные типы данных, объекты взаимного исключения, он должен сперва получить владение блокировками.

Концепция драйвера

Ядро операционной системы Windows не проектировалось для самостоятельного взаимодействия с устройствами.

Соответственно выводы, следующие из этого утверждения, очевидны: для взаимодействия системы с устройствами требуются отдельные интерфейсы, возможно даже сложная совокупность нескольких интерфейсов. Концепция драйвера была разработана для решения задачи сопряжения и используется в моделях большинства современных систем, она основана на работе в адресном пространстве ядра специального кода, который обеспечивает взаимодействие ядра системы с любым типом логических/физических устройств.
Учитывая общую ориентированность ресурса, в статье мы будем освещать специфику исключительно драйверов операционной системы Windows. Итак, для драйвера Windows , как, в общем то, драйверов других операционных систем, верны следующие утверждения:

Драйвер (Driver) - программное обеспечение, при помощи которого операционная система (пользовательские программы, ядро и прочие компоненты) получают доступ к функционалу некоего физического или логического устройства.

то же, но другими словами:

Драйвер - интерфейс между кодом пользовательского режима, режима ядра и функциями физического/логического/виртуального устройства.

Одно из приведенных определений отмечает немаловажную особенность драйвера: ошибочно представлять драйвер исключительно во взаимодействии с физическим устройством, поскольку драйвер не обязательно должен предоставлять доступ к функциям какого-либо оборудования, он может обеспечивать и исключительно программные функциональные особенности. Примерами подобных решений являются драйвера, устанавливаемые в систему антивирусами, системами шифрования данных, системами мониторинга. Общий алгоритм работы любого драйвера следующий: приложения посредством функций специального пользовательского интерфейса (в Windows это API Win32) или запросов ввода-вывода опосредовано/напрямую обращаются к функциям драйвера некоего устройства. Драйвер, в свою очередь, предоставляет доступ к функциональным особенностям интересующего устройства, а так же контролирует процесс взаимодействия между запросами приложений и непосредственно устройством. Естественно, что в драйвере должны быть определены (описаны) все принципы взаимодействия с обслуживаемым (подчиненным, собственным) устройством, должен присутствовать набор данных об управляемом объекте, инструкции (набор команд), с помощью которых системный/пользовательский код может корректно инициализировать устройство и начать с ним взаимодействие.

Загрузка драйверов при запуске операционной системы

Очень интересно было бы увидеть, на какой именно стадии загрузки операционной системы начинает загружается и начинает выполняться первый драйвер Windows? Однако в детальном изложении процесс этот достаточно нетривиален и для глубокого понимания требует реверсинга кода многих компонентов загрузки, в дополнение ко всему необходимо учитывать множество сопутствующих моментов, как то: последовательность загрузки, обусловленную зависимостью между драйверами, по причине которой драйвера могут группироваться в так называемые "группы загрузки", сама загрузка драйверов может разделяться на несколько этапов и прочее. При этом, следует учесть, что в Сети имеется большое количество материалов относительно устаревших уже операционных систем, поэтому мы попытаемся актуализировать процесс загрузки драйверов Windows на примере (наиболее близкой мне по духу) операционной системы Windows 7. И для начала не мешало бы рассказать об основных компонентах ядра Windows, активно участвующих в процессе загрузки драйверов:

  • Диспетчер (менеджер) ввода/вывода (I/O Manager) - модуль режима ядра, входящий в состав исполнительной подсистемы, управляющий процессами ввода/вывода, обеспечивающий абстракцию физических и логических устройств для пользовательских приложений и системных компонентов, связывающий приложения пользовательского режима с драйверами. Контролирует стадии процесса взаимодействия с драйверами. Весь обмен данными менеджера ввода-вывода с драйверами осуществляется через обращение к процедурам обратного вызова драйвера (callback) и передачи им стандартизованной структуры данных IRP, в которой описана вся суть обращения к драйверу;
  • Диспетчер (менеджер) Plug-and-Play (PnP Manager) - модуль режима ядра и пользовательского режима, входящий в состав исполнительной подсистемы, отвечающий за добавление, распознавание, удаление устройств в операционной системе. Часть режима ядра взаимодействует с остальными компонентами системы и драйверами в процессе установки (загрузки) программного обеспечения, необходимого для обслуживания имеющихся в системе устройств. Часть пользовательского режима отвечает за взаимодействие с программами режим пользователя (для интерактивного взаимодействия с пользователем) в ситуациях, требующих установки новых драйверов или настройки рабочих параметров в существующих. Управляет распределением аппаратных ресурсов в системе, так же умеет распознавать устройства, реагировать на их подключение/отключение, загружать соответствующие драйвера при обнаружении новых устройств;
  • Диспетчер (менеджер) управления службами (Service Control Manager, SCM) - системный процесс, ответственный за создание, удаление, запуск и остановку служб и драйверов операционной системы. Так же обеспечивает: функционирование журнала событий, поддержку технологии удалённого вызова процедур (remote procedure call, RPC);

Эти два менеджера, то есть менеджер ввода-вывода и PnP менеджер, активно взаимодействуют между собой.
Теперь мы опишем процесс загрузки операционной системы, однако сделаем это не в привычной нам форме, а кратко отметим ключевые моменты, касающиеся работы описанных компонентов операционной системы с драйверами:

  1. Bootmgr(.efi) загружает модуль winload(.efi) и передает ему управление.
  2. Winload(.efi) сканирует куст реестра HKEY_LOCAL_MACHINE\System\services и получает список всех установленных в системе драйверов. В этом кусте реестра присутствуют разделы, сопоставляемые с конечными драйверами, в них присутствуют разнообразные относящиеся к драйверам параметры, такие как Group , Start , Type , LoadOrderGroup , DependOnGroup , DependOnServices , определяющие те или иные критерии загрузки драйвера.
  3. Winload(.efi) загружает драйвера, критичные для начальной стадии загрузки/функционирования операционной системы, такие как драйвера контроллеров накопителей, драйвера файловых систем. Очевидно, что подобные драйвера имеют наивысший приоритет, поскольку создают базис для загрузки остальных драйверов, поэтому в следствии этих а так же иных причин должны находиться в памяти в момент передачи управления ядру. Соответственно, маркируются они специальным типом SERVICE_BOOT_START . Драйвера на данном этапе начинают загружаться в зависимости от групп, к которым они принадлежат.
  4. Winload(.efi) загружает непосредственно ядро из файла ntoskrnl.exe и передает ему управление.
  5. Ядро загружает Менеджер ввода-вывода и PnP-менеджер.
  6. Менеджер ввода-вывода создает глобальный каталог. Этот каталог, в дальнейшем, используется для регистрации объектов устройств.
  7. PnP-менеджер стартует драйвера, уже загруженные в память на предыдущем этапе (имеющие тип SERVICE_BOOT_START), вызывая процедуру DriverEntry каждого драйвера. На данном этапе загружаются и зависимые драйвера.
  8. PnP-менеджер строит дерево устройств системы, обходит его начиная с корня и загружает драйвера устройств, которые еще не были загружены.
  9. PnP-менеджер загружает оставшиеся незагруженными драйвера устройств, вне зависимости от значения параметра Start . Многие из подобных драйверов имеют тип SERVICE_DEMAND_START .
  10. PnP менеджер загружает драйвера расширенного функционала. К таким драйверам относятся драйвер видеоадаптера, драйвера внешних устройств, драйвера стека TCP/IP. Такие драйвера имеют тип SERVICE_SYSTEM_START .
  11. Ядро загружает Менеджер (диспетчер) управления сеансами/сессиями (Session Manager Subsystem Service, SMSS), который, в свою очередь, загружает Менеджер (диспетчер) управления службами (SCM). SCM сканирует куст реестра (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services ) и на основе полученной информации монтирует внутреннюю базу данных служб/драйверов, формирует программный интерфейс для обслуживания установленных служб/драйверов. SCM загружает "автозапускаемые" не-PnP драйвера (имеющие тип SERVICE_AUTO_START), а также все драйвера, от которых они зависят.

Из всего этого алгоритма загрузки драйверов нам необходимо уяснить следующие основные правила: драйвер может быть загружен (в зависимости от стадии/класса драйвера) при помощи PnP-менеджера, либо с помощью SCM, а вот в процессе функционирования драйвера активно принимает участие Менеджер ввода-вывода.

Структура драйвера Windows

На что может быть похож драйвер по структуре? Неужели это какой-то особый класс программ, устроенных сугубо специфически? Я тоже так когда-то по наивности полагал, но если подумать, то с какой стати разработчикам операционной системы усложнять себе жизнь и изобретать новый специализированный формат образа исполняемого файла для каких-то ядерных компонентов? Намного проще адаптировать старый, давно уже отлаженный и сто раз проверенный.

Драйвер - это своего рода "библиотека режима ядра", обычный файл DLL, у которого в PE-заголовке (структура IMAGE_NT_HEADERS , подструктура OptionalHeader) значение поля Subsystem = 1 (IMAGE_SUBSYSTEM_NATIVE).

Тип подсистемы может быть задан при сборке исполняемого модуля. Сама по себе нативная подсистема характерна для приложений, которые функционируют по иным, отличным от классических, правилам: на стадии подготовки образа к исполнению им не требуется инициализация подсистемы Win32. В числе прочих подсистема native используется для кода режима ядра, коим и являются практически все драйвера.

По аналогии с DLL, упрощенно можно рассматривать драйвер в качестве набора процедур (вызываемых внешними приложениями), каждая из которых предназначается для обработки определенного типа обращений к драйверу.

Сделаем небольшое отступление и поговорим о таком понятии как объект. Дело в том, что весь процесс функционирования драйвера Windows, как и любых других модулей операционной системы, зависит от разнообразных системных структур данных. Эти структуры управляются ядром и могут содержать в себе потоки, события, запросы ввода-вывода, устройства и прочие сущности.

  • Объекты. Блоки данных, содержащие записи свойств той или иной сущности операционной системы. Управляются диспетчером (менеджером) объектов. Многие объекты имеют дескрипторы (описатели), при помощи которых объект становится доступным для приложений.
  • Структуры данных. Блоки данных, содержащие записи свойств той или иной сущности операционной системы. Управляются ядром. Отличаются от объектов, однако (по инерции) так же называются объектами

Поэтому (с большим натягом) все внутренние структуры операционной системы Windows называют объектами.
Теперь вернемся к процедурам драйвера, на деле так называемые "процедуры" драйвера являются COM-объектами обратного вызова, которые обрабатывают поступающие от соответствующих объектов инфраструктуры операционной системы события, говорится что драйвер предоставляет ядру операционной системы COM-интерфейс, заданный серией процедур, реализуемых драйвером. Экспорт, то есть публикация (объявление) процедур драйвера для дальнейшего обращения к ним извне, выполняется путем регистрации в основной процедуре драйвера (стандартной для всех драйверов), носящей название DriverEntry .

Основное назначение функции DriverEntry состоит в том, чтобы разработчик драйвера реализовал в ней заполнение объекта (записей структуры) драйвера указателями на различные внутренние процедуры драйвера, обеспечивающие тот или иной функционал. В процедуре DriverEntry можно задавать (менять) имя объекта устройства, которое впоследствии используется приложениями для открытия дескриптора устройства и отправки пакетов запросов ввода-вывода (IRP).

Функция DriverEntry фактически является функцией глобальной инициализации и выполняется единожды на этапе загрузки драйвера. Эта функция может быть как предельно простой, так и содержать расширенный функционал (дополнительные подпрограммы), такой, например, как создание дополнительных объектов устройств, опрос устройства, дополнительные фазы конфигурации и инициализации устройств(а).
После публикации собственных функций драйвер становится "видимым" ядром операционной системы. Дабы не усложнять и без того достаточно непростую теорию, будем считать, что с точки зрения ядра Windows любое устройство является неким абстрактным "виртуальным устройством", оперирующим стандартизированным набором команд, и доступным через внутренние интерфейсы. Как было уже сказано выше, в ядре операционной системы Windows присутствует специальный модуль исполнительной системы, называемый диспетчером (менеджером) ввода-вывода , обеспечивающий единый интерфейс взаимодействия для всех драйверов режима ядра, включая драйверы физических устройств, драйверы логических устройств и драйверы файловых систем. Соответственно, система ввода-вывода ядра управляет драйверами, или можно сказать, что драйверы используют интерфейс диспетчера ввода-вывода для обеспечения функционирования в операционной системе. С дургой стороны, драйвер обеспечивает преобразование (конвертацию) "стандартных команд", поступающих от операционной системы, в команды, которые "понимает" подконтрольное ему устройство (если оно имеется), и наоборот. Менеджер ввода-вывода определяет набор (множество) стандартных процедур, которые могут быть реализованы в драйвере, поскольку:

Драйвер содержит набор процедур обратного вызова, которые обеспечивают различные стадии процесса ввода-вывода.

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

Собственно, глядя на приведенную схему, становится понятно, какие именно виды взаимодействия, а именно группы процедур должен реализовывать абстрактный драйвер Windows. Давайте теперь перечислим некоторые из этих процедур:

  • Инициализация - Менеджер ввода-вывода запускает процедуру инициализации (носит название DriverEntry), которая предназначается для проведения действий по начальной настройке объекта драйвера, регистрации всех иных процедур драйвера, конфигурированию подчиненного устройства и выполнении иных действия в интересах разработчика.
  • Добавление устройства - добавление (дополнительного) объекта "устройство". В данной процедуре драйвер обычно создает объекты "устройство" для каждого устройства, обслуживаемого драйвером. Обычно используется для Plug-and-Play драйверов.
  • Обработка - набор процедур диспетчеризации (обработки различных состояний). Открытие, закрытие, чтение, запись в устройство, обработка состояний питания, событий PnP и состояний системы, а так же некоторые иные виды взаимодействия описываются в процедурах диспетчеризации. Фактически это основные процедуры, поскольку через процедуры диспетчеризации обрабатываются типовые операции ввода-вывода.
  • Запуск (начало) ввода-вывода - вторая стадия обработки запроса ввода-вывода к устройству, непосредственно стартующая ввод-вывод устройства. Эта процедура может использоваться для начала передачи данных в/из устройства.
  • Процедура обслуживания прерывания - когда устройство генерирует прерывание, диспетчер прерываний передает управление на данную процедуру.
  • Обработка отложенных вызовов процедур - Процедура DPC берет на себя основную работу по обработке прерывания после выполнения ISR. Отложенные вызовы процедур выполняются на низких уровнях IRQL (DPC/DISPATCH) чем сама процедура ISR. Реализуется подобный алгоритм для исключения блокировки других прерываний.
  • Процедура завершения ввода-вывода - многоуровневый драйвер может иметь процедуры завершения ввода-вывод, которые уведомляют о завершении обработки IRP низкоуровневым драйвером.
  • Процедуры отмены ввода-вывода - если операции ввода-вывода могут быть прерваны, драйвер может определить одну или несколько подобных процедур. Когда драйвер получает IRP-пакет для запроса ввода-вывода, который может быть отменен, он назначает процедуру отмены IRP, и пакет IRP проходит через различные стадии обработки, которые эта процедура может изменить или убрать, если текущая операция не отменяема.
  • Процедура быстрой отправки - Драйвера, которые активно используют Менеджер кеша, такие как драйвера файловых систем, обычно предоставляют подобные процедуры для обеспечения возможности обхода ядром типовых алгоритмов обработки ввода-вывода.
  • Процедура выгрузки - должны быть реализованы в каждом драйвере, который работает (освобождают/занимают) с системными ресурсами, для того, чтобы Диспетчер ввода-вывода выгрузить драйвер из памяти.
  • Процедура предупреждения о завершении - позволяет драйверу освободить все занимаемые ресурсы при завершении работы системы.

Становится очевидным, что в процессе разработки драйвера Windows не стоит задачи реализовать весь набор описанных выше процедур, каждый драйвер уникален и разработчик волен обеспечивать собственный набор реализаций, поддерживаемых драйвером. Когда драйвер при помощи PnP-менеджера или SCM загружается в систему, диспетчер ввода-вывода создает в пространстве имен объект "драйвер" (driver object) и вызывает процедуру инициализации драйвера (обычно это DriverEntry), которая выполняет дальнейшие действия по инициализации.

Объект драйвера представляет образ загруженного драйвера в памяти ядра и через данный объект система управляет драйвером.

Объект драйвера представляет код и данные драйвера в ядре: помимо прочего, через этот объект драйвер экспортирует точки входа своих процедур. Процедура инициализации драйвера записывает в атрибуты данного объекта точки входа всех экспортируемых процедур драйвера. После загрузки драйвер может создавать объекты "устройство" для представления устройств или даже для формирования интерфейса драйвера. Большинство драйверов создают объекты "устройство" следующим образом:

  • PnP-драйверы создают объекты "устройство" с помощью своих процедур добавления устройств, когда PnP-менеджер информирует их о присутствии управляемого ими устройства.
  • не-PnP-драйверы создают объекты "устройство" при вызове менеджером ввода-вывода их процедур инициализации.

При создании объекта типа "устройство" (device), драйверу требуется присвоить данному объекту имя. Затем этот вновь созданный объект помещается в пространство имен диспетчера объектов (Object Manager), который, как и диспетчер (менеджер) ввода-вывода, является частью исполнительной подсистемы ядра. Менеджер объектов предназначается для ведения базы всех ресурсов операционной системы, представленных в качестве объектов. Имя объекта может определяться самим драйвером в явном виде, либо генерироваться автоматически менеджером ввода-вывода. По соглашению, объекты "устройство" должны размещаться в каталоге \Device пространства имен менеджера объектов, недоступном приложениям через Win32 API. А для того, чтобы объект "устройство" стал доступным для приложений, драйвер должен создать в каталоге \GLOBAL?? символьную ссылку на имя этого объекта в каталоге \Device . Драйверы, не поддерживающие технологию Plug-and-Play, и драйверы файловой системы обычно создают символьную ссылку с общеизвестным именем (скажем, \Device\VMwareKbdFilter). Только после всех перечисленных действий драйвер становится "виден" в системе и доступен для вызова пользовательскими приложениями.

Взаимодействие с драйвером

Каким же образом пользовательская программа может взаимодействовать с драйвером в системе? На этот случай имеется два способа:

  1. Неявный -- вызов типовой функции Win32 API;
  2. Явный -- прямой запрос ввода-вывода к драйверу;

Ну с первым случаем все достаточно просто, в прикладной программе вызывается какая-либо ординарная функция Win32 API (например, CreateFile), которая, затем, в зависимости от целевого объекта (файла, каталога) может вызвать в цепочке своих вызовов функцию обмена с драйвером. Фактически, в этом случае код приложения не ставит своей задачей взаимодействовать с каким-либо драйвером, просто по цепочке вызовов процедур, на определенном этапе выполнение уходит в режим ядра и там происходит вызов функции драйвера. Все это остается сокрытым от разработчика, однако возможно отследить взаимодействие при помощи отладочных средств.
Второй случай более интересен, он возникает когда под вызовом драйвера подразумевается не косвенный вызов (посредством вызова типовой функции), а передача при помощи специальной функции (например, DeviceIoControl) так называемого запроса ввода/вывода (I/O control request), который, в дальнейшем, инициирует формирование блока данных под названием пакета запроса ввода-вывода.

Пакет запроса ввода-вывода (IRP, I/O Request Packet) - структура данных ядра Windows, содержащая информацию, описывающую запрос ввода-вывода.

Формально IRP это пакет, но фактически это объект ядра, то есть структура (блок) данных с набором процедур для менеджера ввода-вывода, обеспечивающая обмен данными между программой и драйвером, либо между драйвером и драйвером. Как мы уже упоминали, архитектура Windows построена таким образом, что в ней запрещено прямое взаимодействие программы режима пользователя и драйвера, поэтому подобный обмен сводится к посылке программой кода IOCTL, который уже приводит к формированию менеджером ввода-вывода IRP пакета запроса. Именно менеджер ввода-вывода, как ответственный за взаимодействие с драйверами, оперирует пакетами IRP. Менеджер ввода-вывода получается запрос на ввод-вывод от пользовательской программы, затем формирует IRP и передает его соответствующему драйверу.
Пакет IRP состоит из двух частей:

  • постоянной части;
  • стека размещения ввода-вывода.

В постоянной части IRP содержит старший и (не всегда) младший код функции. Старшие коды: IRP_MJ_CREATE , IRP_MJ_CLOSE , IRP_MJ_READ , IRP_MJ_WRITE , IRP_MJ_CLEANUP , IRP_MJ_DEVICE_CONTROL , IRP_MJ_INTERNAL_DEVICE_CONTROL , IRP_MJ_SCSI , IRP_MJ_SYSTEM_CONTROL , IRP_MJ_POWER , IRP_MJ_PNP , IRP_MJ_SHUTDOWN . Пакет так же содержит стек размещения ввода-вывода - специальную структуру IO_STACK_LOCATION , содержащую определенные параметры: это набор устройств, которые обработают данный IRP пакет. Причем по стеку этот пакет передается последовательно от устройства к устройству. Более чем одно размещение стека говорит о том, что IRP может быть обработан несколькими драйверами. "Ячейки стека" IRP и предназначены для хранения "переменной" информации при хождении пакета IRP по стеку драйверов. Пакет IRP проходит по опубликованным процедурам каждого драйвера, каждая из которых извлекает из "своей" ячейки стека размещения ввода-вывода необходимую ей информацию. Процедуры драйвера традиционно называются "процедуры обратного вызова" (callback). Как мы уже упоминали, функция инициализации драйвера DriverEtnry сообщает ядру (публикует) имена этих процедур и позже ядро само вызывает ту или иную процедуру при определенных обстоятельствах.
В отличие от штатной программы, драйвер не является классическим процессом со своим адресным пространством и не имеет потока исполнения. Вместо этого, функция драйвера выполняется в контексте того потока и процесса, в котором она была вызвана. Контекст (пространство выполнения кода) драйвера зависит от того, кто производит обращение (вызывает) к драйверу. Обращение может быть инициировано:

  1. Прикладной программой (программой пользовательского режима). В этом случае контекст исполнения драйвера точно известен, и он совпадает контекстом прикладной программы;
  2. Другим (сторонним) драйвером. В этом случае контекст исполнения определить сложнее, он может быть как известным, так и случайным, это зависит от контекста исполнения функции вызывающего драйвера.
  3. Аппаратным/программным прерыванием. В этом случае контекст исполнения случайный, поскольку прерывание (и, соответственно, переключение на код драйвера) может произойти при выполнении абсолютно любого кода в операционной системе.

Опять же, в отличии от штатной программы, драйвер не может вызывать стандартные функции Win32 API, может лишь оперировать доступными в ядре функциями, которые начинаются с префиксов Ex.. , Hal.. , Io.. , Ke.. , Ks.. , Mm.. , Ob.. , Po.. , Ps.. , Rtl.. , Se.. , Zw.. и некоторых других.

Виды (типы) драйверов Windows

В процессе эволюционирования и, соответственно, усложнения драйверной концепции, драйверы начали подразделяться на категории (или типы) в зависимости от назначения. Вот основные из них:

  • Драйверы классов (Class driver) - драйверы, разработанные Microsoft для определенного класса устройств.
  • Драйверы файловых систем (File System Drivers) - драйверы, реализовывающие файловые системы на различного рода носителях информации.
  • Унаследованные драйвера (Legacy drivers) - "устаревшие" (совместимые по структуре со старыми версиями ОС) драйверы режима ядра, самостоятельно напрямую контролирующие подчиненное устройство без каких-либо дополнительных драйверов устройства. Почему они носят такое название? Потому, что это тип драйверов, сохранившийся от первых версий ОС линейки Windows NT.
  • Драйвер шины (Bus driver) - Драйверы, обеспечивающие функционал какой-либо шины компьютера (ISA,PCI,USB,IEEE1394 и прочих);
  • Фильтрующие драйверы (Filter driver) - драйверы, использующиеся для мониторинга/изменения логики другого драйвера путем работы с данными, проходящими через него.
    • Верхние фильтрующие драйверы (Upper-filter drivers) - подтип фильтрующих драйверов, находящийся выше функционального драйвера по стеку. Через верхние фильтрующие драйверы проходят все запросы, а это значит, что они могут изменять и/или фильтровать информацию, идущую к функциональному драйверу, ну и далее, возможно, к устройству. Примерами могут являться фильтр-драйвер, который отслеживает/фильтрует трафик, шифрует/перехватывает запросы чтения/записи. Такие драйверы используются в брандмауэрах.
    • Нижние фильтрующие драйверы (Lower-filter drivers) - подтип фильтрующих драйверов, находящийся ниже функционального драйвера по стеку. Через подобные нижние фильтрующие драйверы проходит, как правило, меньше запросов по сравнению с остальными фильтрующими драйверами, потому как большинство запросов выполняет и завершает сам функциональный драйвер.
  • Функциональные драйверы (Function driver) - драйверы, функционирующие самостоятельно и определяющие все аспекты, связанные с устройством.
  • PnP драйвер (PnP Driver) - драйвер, поддерживающий технологию Plug-and-Play;
  • Минидрайвер (минипорт, миникласс) (Miniport driver, Minidriver, Miniclass driver) - драйверы, которые обрабатывают задачи, связанные с конечным устройством и используют драйвера класса для управления устройством. Действуют как одна из частей пары драйверов, в которой данная категория действует как драйвера конечных устройств, выполняющая специфичные задачи устройства.

По уровню компонетизации драйверы бывают:

  • Одноуровневые - обработка ввода/вывода реализуется в рамках одного исполняемого модуля (драйвера).
  • Многоуровневые - обработчка ввода/вывода распределяется между несколькими драйверами.

PnP драйвера под Windows подразделяются на:

  • Функциональный Драйвер
  • Драйвер шины (шинный драйвер)
  • Драйвер-фильтр (фильтр-драйвер)

По режиму выполнения драйверы Windows градируются:

  • Драйвер пользовательского режима.
  • Драйвер режима ядра.

Модели драйверов

На протяжении всего времени существования операционной системы, разработчики пытались стандартизировать и упростить разработку драйверов. В следствии чего появились модели.

Модель WDM

Когда-то очень давно существовало две основных направления развития драйверной концепции Windows:

  1. в Windows 95/98 применялась модель VxD (Virtual Device Driver);
  2. в Windows NT3.51 параллельно развивалась модель NT-драйвер (драйвер в стиле NT, NT Driver).

Однако, начиная с версии Windows 98/NT4.0 разработчики предприняли попытку унифицировать (универсализировать) разработку драйверов, в следствии чего на смену упомянутым моделям пришла новая модель WDM.

WDM (Модель драйвера Windows, Windows Driver Model) - единая среда разработки (фреймворк) для драйверов устройств операционной системы Windows. Была создана для уменьшения кода стандартизации требований к драйверам.

Модель WDM являлся этапом переопределения классического стека драйвера Windows с целью обеспечения поддержки являющихся в то время революционными технологий Plug-and-Play и ACPI. Модель дает возможность загружать/выгружать драйверы "на лету", без необходимости в перезагрузке операционной системы, разрабатывать драйвера в виде расширений (фильтров) к стандартным системным драйверам, более гибко управлять энергосбережением и конфигурацией устройств и прочее.
В рамках модели WDM любое аппаратного устройство поддерживается, как минимум, двумя драйверами:

  • Функциональный драйвер (Function driver) - ответственен почти за все функциональные особенности обслуживаемого устройства: операции ввода-вывода, обработка прерывания и управление устройством;
  • Драйвер шины (Bus driver) - ответственен за обслуживание соединения между устройством и компьютером, фактически поддержкой связующей шины (например, PCI, USB и прочие).

Модель WDF

На протяжении всего времени развития, модель WDM претерпевала множество изменений, существенно разрастаясь. Начиная с Windows Vista была предпринята очередная попытка развития концепции драйвера Windows, в сущности уже существовавшей на тот момент модели WDM, результатом чего явилось новой модели (надстройки над WDM) под названием WDF.

WDF (Основа драйверов Windows, Windows Driver Foundation) - среда разработки (набор инструментальных средств), облегчающих разработку драйверов устройств для операционных систем Windows (Windows 2000 и более поздних).

Связано это было с тем неоспоримым фактом, что разработчикам не удалось достичь достаточного уровня абстракции модели WDM, а именно недостаточной интеграцией подсистемы ввода-вывода с технологией Plug-and-Play и управлением питанием. Это приводило к тому, что на разработчике драйвера лежала громадная нагрузка по синхронизации этих самых запросов ввода-вывода с событиями Plug-and-Play и запросами энергопотребления. Очевидно, требовалось дальнейшее упрощение драйверной модели. WDF пришла на смену WDM и считается наиболее современной моделью.
WDF реализует следующие возможности:

  1. "Вынесение" некоторых некритичных к режиму исполнения классов драйверов в пользовательский режим, что дало сокращение общего количества сбоев в ядре.
  2. Большая часть обработки взаимодействия подсистемы ввода-вывода с Plug-and-Play и управлением электропитанием выполняется теперь встроенными механизмами модели WDF.
  3. Предоставление новых внутренних интерфейсов модели WDF, которые позволяют абстрагироваться от более сложных для понимания системных интерфейсов; В модели WDM/legacy довольно сложно реализовать логику некоторых частей взаимодействия с драйвером, не изучив все азы сложной архитектуры ядра, WDF же позволяет автоматизировать многие виды взаимодействия; Большое количество кода при разработке WDM-драйвера теперь может быть заменено вызовами процедур WDF.
  4. Возможность создания "канонического" драйвера. Присутствие шаблонов, которые предоставляют стороннему разработчику возможность переопределения уникальных для его драйвера критериев, тем самым сокращая время на разработку.

Модель WDF подразделяется на два направления:

  • UMDF (Kernel-Mode Driver Framework) - среда разработки драйвера режима ядра.
  • KMDF (User-Mode Driver Framework) - среда разработки драйвера режима пользователя.

Подразделение сред по режимам пользователя и ядра в модели WDF достаточно условное, поскольку основное предназначение данного разграничения заключается в классификации разработки драйверов для тех или иных классов устройств.

Здравствуйте друзья! В этой статье, мы покажем вам, как скачать драйвера для материнской платы Asus тремя разными способами, выбирайте любой, конечно правильней всего скачать драйвера на сайте изготовителя мат. платы, но к сожалению это удастся не всегда. В начале статьи несколько писем от наших читателей.

Как скачать драйвера для материнской платы Asus

На самом деле, здесь всё очень просто! Самый простой способ установить драйвера на материнскую плату, так это с диска с драйверами, который шёл вместе с материнкой при покупке, но если этот диск сьела ваша собака, тогда скачать драйвера на мат. плату, можно с её официального сайта, если нужных драйверов там нет, надо воспользоваться встроенным в Windows средством «Параметры установки устройств » или программой DriverPack Solution . Давайте разберём все варианты подробно, а заодно, вместе с драйверами на материнку, установим драйвера на звуковое устройство, сетевой адаптер и так далее.

Один знакомый попросил меня собрать ему системный блок. Материнскую плату он выбрал ASUS, операционную систему Windows 8, после сборки компьютера и установки на него системы, большую часть драйверов восьмёрка установила автоматически. Но вот какие версии драйверов установились новые или старые и что делать, если не все драйвера установились, давайте зайдём на официальный сайт Asus и во всём этом разберёмся.

Во первых, искать драйвера нужно в первую очередь на официальном сайте материнской платы. Возможно, что не всё вам удастся найти, а иногда и ничего. Например, на сайте вашей устаревшей материнки не окажется драйверов для новой операционной системы Windows 8. Что тогда делать? Читайте дальше!

Примечание: На всякий случай, перед работой.
Идём на сайт http://www.asus.com/ru/ , вводить нужно только модель материнской платы, например ваша материнка называется Asus P8Z77-V LX, а вводить нужно P8Z77-V LX.

В появившемся окне жмём на название нашей материнской платы.

Поддержка.

Скачать и указываем версию установленной у нас операционной системы. Например у меня установлена Windows 8, видим найдено 82 файл (а/ов).

Что из них и в каком порядке устанавливать? В первую очередь установим драйвера на материнскую плату .
Друзья, что такое драйвера на материнскую плату? Материнская плата состоит из Чипсета (от англ. ChipSet) набора микросхем, которые взаимодействуя между собой, обеспечивают работу всего, что подключено к материнской плате. Основных производителей чипсетов для материнских плат немного: Intel, AMD, NVIDIA, VIA Technologies и SIS.
Несколько лет назад основных чипа на материнской плате было два:
Северный мост обеспечивал взаимодействие процессора с оперативной памятью и видеокартой.
Южный мост отвечал за работу контроллеров PCI, SATA, Ethernet, RAID, USB, управление питанием (Power management, APM и ACPI).
Чтобы все перечисленные устройства работали правильно, нужно установить драйвера на материнскую плату или точнее на чипсет материнской платы.

На данный момент, на всех новых чипсетах Intel и AMD, деления на северный и южный мост уже нет. Простыми словами, видеокартой (графической шиной PCI Express) и оперативной памятью (контроллер памяти) управляет сейчас процессор.
А всем остальным управляет единый чип, отвечающий за поддержку портов SATA 3 Гбит/с, 6 Гбит/с, портов USB 3.0 и 2.0, контроллера RAID, контроллера Ethernet и многого другого.

Простыми словами, установить драйвера на этот чип, это одно и тоже, что и установить драйвера на материнскую плату.

Intel Management Engine Interface V8.1.0.1263 for Windows 8 32/64bit – Набор драйверов для материнских плат собранных на микросхемах Intel и предназначенных для работы в операционной системе Windows 8, но это простыми словами. А вот это умными словами.

Intel Management Engine Interface – Это подсистема, встроенная в чипсет материнской платы и выполняющая такие задачи как мониторинг (наблюдение) за температурой, скоростью вращения кулеров, загрузкой Windows, режимом сна и многим другим. Поэтому установить эти драйвера очень нужно.

Итак, выбираем последнюю версию и жмём на кнопку Глобальный (сервер).

Скачивается архив, разархивируем содержимое в папку. У кого нет программы-архиватора, скачиваем бесплатный 7-Zip на сайте

http://www.7-zip.org/ . После разархивации архива запускаем в папке файл установщик AsusSetup.exe

И устанавливаем драйвера Intel Management Engine Interface .

Здесь же, в разделе Chipset, видим самый нужный нам компонент.
Intel Chipset Driver V9.3.0.1021 for Windows 8 32bit & Win8 64bit---(WHQL) – Необходимый набор драйверов для чипсетов Intel. В операционную систему устанавливаются INF-файлы, конфигурирующие компоненты чипсета, необходимые для правильного функционирования многих компонентов материнской платы (PCI, SATA, IDE, RAID, USB 3.0 и 2.0) и других системных устройств) и их точной идентификации в Диспетчере устройств. Также выбираем последнюю версию и нажимаем Скачать.

Скачиваем архив, разархивируем его в папку, запускаем файл AsusSetup.exe и устанавливаем драйвер на чипсет материнской платы.

Как скачать драйвер на чипсет на сайте самого производителя чипсета (в нашем случае INTEL)

Даже на сайте производителя материнской платы, драйвер на чипсет может быть выложен не самой последней версии. Самую последнюю версию драйвера на чипсет можно скачать только с сайта производителя чипсета. Чипсет на нашу материнскую плату изготовила фирма Intel, значит драйвера на чипсет нашей материнской платы выложены также на сайте Intel. Так как на этом сайте чёрт ногу сломит, предлагаю вам небольшое руководство.

Идём на сайт
https://downloadcenter.intel.com/Detail_Desc.aspx?lang=rus&DwnldID=20775
Самое первое, это ОНО - Intel® Chipset Device Software (INF Update Utility). Как я вам и говорил, здесь выложена самая последняя версия драйвера на чипсет нашей материнской платы: 9.4.0.1022, на сайте материнской платы выложена немного устаревшая версия 9.3.0.1021. Драйвер для всех чипсетов Intel, с поддержкой новинок 8-й серии. Intel Chipset Device Software - драйверы для материнских плат на чипсетах Intel, нужны для нормального функционирования всех компонентов материнской платы: шин PCI-Express, AGP, PCI, USB, IDE и так далее. Нажимаем Загрузить и скачиваем драйвер.

Запускаем установку версии 9.4.0.1022.

Всё друзья, основные драйвера на нашу материнскую плату мы установили. Теперь таким же образом вы можете скачать и установить все остальные драйвера.

Возвращаемся на сайт нашей материнской платы.

Realtek Audio Driver

Драйвер на встроенное в материнскую плату звуковое устройство может быть немного устаревшим, конечно в большинстве случаев, возможностей этого драйвера вам хватит вполне. Просто, если кто-то захочет установить в систему именно самый последний драйвер вашего звукового устройства, тогда нужно скачать его с оф. сайта Realtek. Как это сделать? Воспользуйтесь нашей статьёй

LAN (сетевая карта)

Realtek LAN Driver

После того как я установил Windows 8, система установила на сетевую карту свой драйвер. После установки сетевого драйвера с сайта материнской платы, его версия стала новее и поставщик был уже Realtek. Но я уверен, если зайти на оф. сайт Realtek, можно найти версию ещё новее.

Интегрированное видео: Intel Graphics Accelerator Driver
На вашей материнской плате есть встроенная видеокарта, если вы ей не пользуетесь, эти драйвера можно не устанавливать.

Остальные драйвера устанавливайте по вашему усмотрению.

SATA
Intel(R) Rapid Storage Technology Driver Software

Технология Intel® Rapid Storage немного увеличивает быстродействие жёсткого диска и снижает его энергопотребление.

http://www.intel.ru/content/www/ru/ru/architecture-and-technology/rapid-storage-technology.html

Intel Smart Connect Technology
Технология Intel Smart Connect периодически возобновляет работу системы и устанавливает подключение к сети, когда компьютер находится в режиме сна. Электронная почта, сайты социальных сетей, различные облачные сервисы могут получают данные из Интернета и быстро обновлять данные.

Intel AHCI/RAID Driver Path for Windows Win8.1 32bit & Win8.1 64bit.

У нас новая материнская плата и она работает в режиме AHCI .(AHCI) - новая технология работы жёстких дисков и SSD по протоколу Serial ATA, позволяющая использовать очередность команд (NCQ) и горячую замену. Скачайте и установите этот драйвер.



Как установить драйвера на материнскую плату автоматически Windows 7 и Windows 8 имеет в своём арсенале довольно большую базу драйверов и поддерживает почти все известные устройства. Чтобы операционная система нашла сама все нужные драйвера, нужно в « Панели управления » включить средство «Параметры установки устройств » в «Автоматический режим »
В Windows 7 Пуск->Устройства и Принтеры.
В операционной системе Windows 8 щёлкаем правой мышью в левом углу и тоже выбираем "Панель управления", затем "Просмотр: Мелкие значки" ->Устройства и принтеры

Щёлкаем правой мышью на названии нашего компьютера и выбираем "Параметры установки устройств"

Отмечаем пункт «Да, делать это автоматически (рекомендуется)» и Сохранить.

Обратите внимание, операционная система сразу начала поиск неопознанного устройства.

Если установка драйвера в автоматическом режиме закончилось неудачей, значит используем другой способ.

Многие опытные пользователи считают, что установка драйверов таким способом не очень хороша, так как в автоматическом режиме драйвера устанавливаются урезанные и зачастую не самых последних версий. Да это так, но драйвера эти вполне работоспособные и в большинстве случаев устроят обычного пользователя. Если вас не устраивает данный вариант, пробуем ещё один способ.

Как скачать и установить драйвера для материнской платы с помощью программы DriverPack Solution

Для этого, нужно просто скачать специальную программу "DriverPack Solution", имеющую в себе огромное количество драйверов, вообще после скачивания программы, её можно закинуть на флешку, и носить с собой. И вы, и ваши друзья, забудете про проблемы с драйверами вообще. Программу скачивайте только на официальном сайте. Переходим по ссылке

http://drp.su/ru/download.htm

Самое первое, что нам предлагают скачать, это DriverPack Solution Lite, маленькая программулька 10 Mb. Скачивается и устанавливается за секунды, сканирует ваш компьютер на предмет неустановленных драйверов и предлагает их установить. В одной из своих статей, с помощью этой программы, можете почитать. Но часто бывает, что DriverPack Solution Lite находит не все нужные драйвера, поэтому я предлагаю вам скачать версию "DriverPack Solution Full" объём 6,2 Gb, имеет практически все драйвера. Жмём скачать,

Надеюсь бесплатная программа торрент у вас есть, если нет, скачайте её вот здесь http://www.utorrent.com/intl/ru/ , Сохранить, выбираем в какую именно папку, ещё раз Сохранить и диск скачивается нам на компьютер.


Скачали. Диск с драйверами имеет расширение.rar. Если у вас установлен архиватор, разархивируйте содержимое архива в папку и запустите файл DriverPackSolution.exe.

Если архиватора нет, можете скачать бесплатный 7-Zip на сайте http://www.7-zip.org/
В главном окне программы находится вся информация об установленных и неустановленных в вашей операционной системе драйверах. Также можете увидеть, какие драйвера можно обновить.

Интересно, но не смотря на то, что мы обновили драйвера на нашу материнскую плату с сайта производителя, драйвера на некоторые компоненты материнской платы до сих пор нуждаются в обновлении, например:
Контроллер LPC для набора микросхем Intel Z77 - 1E44 имеет версию драйвера от 06.21.2006
Если заглянуть в Диспетчер устройств, то мы увидим тоже самое.

LPC это низкоскоростная шина для подключения к контроллеру ввода-вывода низкоскоростных устройств: FDD (флоппи-дисковод), старых принтеров интерфейса LPT и так далее. Большая часть перечисленных устройств, это уже история. Обновленный драйвер на этот контроллер LPC, да и на все другие устройства можно найти на официальном сайте Intel, но стоит ли этим затруднять себя, когда можно просто расставить все галочки в программе DriverPack Solution Full и нажать установить, нужные на драйвера обновятся автоматически в течении нескольких секунд.

Можете устанавливать и обновлять драйвера выборочно, отмечаем галочкой нужное устройство и жмём Интеллектуальная установка (рекомендуется).
Давайте обновим драйвера на наш Контроллер LPC для набора микросхем Intel Z77 - 1E44 и ещё на сетевую карту Realtek, ставим галочку на нужных пунктах и жмём Установить.

После обновления идём в диспетчер устройств и смотрим результат. На выбранные нами устройства установились обновленные версии драйверов.

Самый главный совет. Друзья! Если у вас всё в компьютере работает нормально и вас всё устраивает, не нужно заморачиваться с поиском и установкой новых версий драйверов.

Установка драйверов для компьютера (ПК) делится на два (или три) этапа:

  1. Установка драйверов для материнской платы
  2. Установка драйверов для видеокарты (опционально)
  3. Установка всех остальных драйверов (опционально)

Опционально так как у вас может не быть дискретной видеокарты, а для встроенной вы все поставите в резделе … для материнской платы.

1. Установка драйверов для материнской платы

Можно разделить на следующие этапы:

  1. Узнать модель материнской платы
  2. Найти модель на сайте производителе
  3. Установить драйвер для чипсета
  4. Установить все остальное

1.1. Узнать модель материнской платы

Модель написана на самой материнской плате и на коробке от нее. Если коробка не сохранилась, то идеальный и 100% способ узнать это - вскрыть системный блок и посмотреть что на ней написано. Если это не вариант (например у вас компьютер на гарантии и стоят пломбы), то можно попробовать утилиту HWMonitor или CPU-Z . Скачиваем, распаковываем и запускаем для.

1.2. Найти модель на сайте производителе

Например у вас материнская платы ASUS Z170-PRO. Открываем браузер. Пишем в поисковой строке «АСУС» (гугл и яндекс понимают в любой раскладке). Переходим на сайт www.asus.com.

Вверху в поле писка пишем свою модель.

Когда вы нашли страницу про свою материнскую плату нужно: перейти в раздел «Поддержка», переключиться на вкладку «Драйверы и Утилиты», выбрать из списка свою операционную систему. .

Если в выпадающем списке нет вашей системы, то смотрите.

1.3. Установить драйвер для чипсета

3. Установка всех остальных драйверов (опционально)

Для остальных устройств поступаем аналогично. Находим фирму производителя устройства (на коробке или на самом устройстве) скачиваем с официального сайта или с этого сайта драйверы для своей системы и устанавливаем.

Как автоматически установить драйверы на компьютер

Есть две утилиты и DriverUpdaterPro . Первая - бесплатная (не забудьте перейти в режим эксперта, чтобы выбрать что устанавливать, а что нет). Вторая платная - там ничего настраивать не нужно.

Подробнее про установку драйверов для компьютера смотрите в видео ниже.

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

На системной плате находится сетевой адаптер, различные разъемы, звуковая карта и еще некоторые составляющие, поэтому к каждому из них нужно поставить отдельное ПО. Способы, приведенные в этой статье, подразумевают инсталляцию сразу всех файлов, а в других же юзеру нужно будет ставить все по очереди. Выберите наиболее подходящий метод и просто следуйте приведенной инструкции, тогда все обязательно получится.

Способ 1: Официальная страница помощи производителя

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



Начнется загрузка файла, после чего остается лишь открыть его и запустится процесс автоматической инсталляции. После его завершения рекомендуется перезагрузить компьютер, чтобы изменения вступили в силу.

Способ 2: Утилита от производителя

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



Способ 3: ПО для установки драйверов

Еще один вариант, позволяющий сразу установить все требуемые драйверы – использование специального программного обеспечения. Работает оно по принципу официальных утилит от разработчика, только производит более глобальное сканирование всего ПК. Минусом же является платность некоторых представителей и навязывание дополнительного ПО. Инсталляция драйверов для материнки с помощью делается так:



Кроме DriverPack на просторах интернета есть большое количество похожего софта. Каждый представитель работает примерно по одному и тому же принципу, а разобраться в нем сможет даже новичок. Рекомендуем к ознакомлению другую нашу статью по ссылке ниже, в ней вы подробно узнаете о лучшем ПО для инсталляции драйверов.

Способ 4: Установка по ID оборудования

Каждому комплектующему присваивается свой уникальный номер. Как уже было сказано выше, материнская плата состоит из нескольких встроенных комплектующих, у каждого есть свой ID. Вам требуется лишь узнать его и задействовать специальный сервис, чтобы найти свежие файлы. Осуществляется это следующим образом:

Способ 5: Стандартные средства Windows

В операционной системе Windows имеется собственная утилита, позволяющая через интернет найти и обновить драйверы для устройств. К сожалению, не всегда составляющие материнской платы корректно определяются ОС, однако в большинстве случаев такой способ поможет поставить правильное ПО.

Если новые файлы будут найдены, просто подтвердите установку, а она выполнится самостоятельно.

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

Каждый пользователь персонального компьютера рано или поздно сталкивается с необходимостью установки драйверов. Чаще всего это происходит после переустановки операционной системы Windows. Но далеко не все при этом могут вспомнить, где же именно лежат все эти диски с драйверами, да к тому же диски имеют свойство царапаться и постепенно приходить в полную негодность. А можно ли установить драйвера без установочных дисков? Конечно можно, и сегодня мы с вами узнаем три способа, с помощью которых можно установить все необходимые системные драйвера.

Установка драйверов с сайта производителя

Данный способ является самым надежным, поскольку скачивая драйвера с сайта производителя можно быть полностью уверенным в их совместимости с вашим оборудованием. Кроме того на официальном сайте производитель всегда размещает наиболее свежие версии драйверов. Также таким образом мы избежим заражения вирусами, которые легко можно подцепить при поиске драйверов на сторонних сайтах. Для того чтобы загрузить драйвер с сайта производителя необходимо сначала узнать модель оборудования, к которому вам нужен драйвер. Для этого можно посмотреть название модели на самом оборудовании, а если не хотите лезть внутрь компьютера или ноутбука, то можете использовать специальную программу для диагностики, например Aida 64.

Узнав модель нашего оборудования, отправляемся на поиски. Например, нам нужны драйвера к материнской плате Asus H 87-Plus. Переходим на официальный сайт фирмы Asus и заходим в раздел Поддержка

В разделе указать модель вручную нажимаем на кнопку Начать , выбираем пункт Материнские платы и указываем в нем серию и модель нашей материнской платы.

Затем нажимаем на другую кнопку Начать и на новой странице переходим в раздел Скачать . Здесь мы указываем тип и разрядность нашей операционной системы.

После этого на странице появится список различных драйверов. Выбираем те, которые нам нужны, загружаем и устанавливаем.

Поиск драйверов по коду

Если вдруг у вас не получилось определить производителя и модель оборудования можно произвести поиск драйверов в интернете по уникальному коду оборудования. Для этого необходимо щелкнуть правой кнопкой мышки по значку Мой компьютер , выбрать пункт Управление и в открывшемся окне со списком выбрать Диспетчер устройств . Затем в правой части окна дважды нажимаем по устройству, на которое нам нужно установить драйвер, и переходим во вкладку Сведения . Здесь нам нужно скопировать код маркировки устройства Ven&Dev.

Теперь заходим на сайт Devid.info/ru и вводим в поисковую строку код нашего устройства.

Нажимаем Искать , потом чуть ниже выбираем тип и разрядность установленной у нас операционной системы и скачиваем наш драйвер.

Установка драйверов со сборника

Самый быстрый и легкий способ установки драйверов – это установка со сборника. Одним из наиболее популярных сборников драйверов является DriverPack Solution. Эта бесплатная программа, скачать которую можно с сайта Drp.su/ru, в автоматическом режиме выполнит сканирование системы и установит все необходимые драйвера.

Программа скачивается в виде образа ISO, который затем записывается на DVD диск. Дальше все просто: вставляем диск в привод и активируем автозапуск (если не активен). Также на сайте имеется облегченная версия – она представляет собой программу, которая после установки выполняет сканирование системы и ищет необходимые драйвера в интернете. Однако для ее работы нужно, чтобы был установлен драйвер на сетевую плату. В целом программа DriverPack Solution является превосходной утилитой, помогающей быстро решить проблему с драйверами, однако нельзя гарантировать, что найденные ею драйвера будут абсолютно совместимы с вашим оборудованием и операционной системой. Поэтому при возможности лучше все-таки пользоваться первым способом – загрузка драйверов с официального сайта оборудования.

Остались вопросы? - Мы БЕСПЛАТНО ответим на них в

Драйвер материнской платы – это некая программа, которая отвечает за корректность работы всей системы. Запоздалое обновление драйверов может привести к серьезным неполадкам «внутренностей» компьютера и сбоям системы. Поэтому обновлять их очень важно.

Рассмотрим самый простой способ обновления через диспетчер устройств. Чтобы попасть в заветный раздел, нажмите «Пуск», далее «Панель управления». В новом окне кликните по «Оборудования и звук». Сверху в пункте «Устройства и принтеры» кликните по надписи «Диспетчер устройств». Возле него располагается сине-желтый щит, поэтому вы тут же его найдете. Итак, первый этап окончен, мы попали в «Диспетчер устройств».



Есть еще один быстрый способ, как открыть диспетчер устройств. Зайдите в «Компьютер», кликнув два раза по значку на рабочем столе, или через меню «Пуск». Открылось окно, где расположены жесткие диски. Сверху есть голубая полоска с кнопками, нажмите «Свойства системы».



Появилось окно с основными данными установленной системы и деталями компьютера. Изучив эту страницу, вы узнаете:

  • количество оперативной памяти на вашем компьютере;
  • характеристики процессора;
  • разрядность системы;
  • сведения о Windows;
  • характеристики видеокарты (интегрированные видеокарты не показывает).

Не забываем о первоначальной цели – зайти в Диспетчер устройств. Одноименную кнопку вы найдете в левом верхнем углу, рядом сине-желтый щит. Нажимаем и оказываемся в Диспетчере устройств.



Идем во вкладку «Системные устройства». Выпадает целый список названий. Ищем те строчки, где написано « Chipset». Вместо Intel(R) может быть AMD Athlon – зависит от изготовителя. Кликаем правой клавишей мышки по строчке и выбираем «Обновить драйверы». В выпавшем окне выбираем автоматический поиск обновленных драйверов.



Если драйвер устарел, тогда система найдет новый и предложит установить. Если установлена последняя версия, тогда увидите табличку с надписью «Наиболее подходящее программное обеспечение уже установлено».



Дабы «освежить» драйвера материнской платы. можно воспользоваться поддержкой продукта от изготовителя. Очень просто это сделать для ноутбуков. Вам всего лишь стоит зайти на официальный сайт марки лэптопа и скачать нужный драйвер. Если же не знаете его названия, просто включите поиск всех новых драйверов, и вам будет установлен полный комплект.



Проблематичней обновить драйвера материнки для настольных ПК, так как они собираются из разных запчастей. Сперва вам следует узнать модель материнской платы. Быстрый способ, чтобы это сделать, зажать клавишу Windows+R и в появившемся поле ввести команду “dxdiag” или “msinfo32”. Пункты «Изготовитель» и «Модель» определяют создателя материнской платы. Теперь зайдите на его официальный сайт и найдите интересующий драйвер. Прочитать подробнее о том, как узнать модель материнской платы, можете



На самом деле обновить драйвер материнской платы несложно. Просто будьте внимательны в действиях и прежде, чем что-либо совершить, прочитайте инструкцию по обновлению еще раз. Если не уверены в своих силах, попросите знающего друга или коллегу помочь вам с этой задачей.

Наверно у каждого, кто хоть раз самостоятельно переустанавливал операционную систему, возникал популярный вопрос: как узнать, какие драйвера необходимо установить на компьютер для его стабильной работы? Именно на этот вопрос мы и попытаемся ответить в данной статье. Давайте разбираться подробнее.

В теории, на компьютер или ноутбук нужно устанавливать софт для всех устройств, которые этого требуют. Со временем разработчики операционных систем постоянно расширяют базу драйверов Microsoft. И если во времена Windows XP приходилось устанавливать вручную чуть ли не все драйвера, то в случае с более новыми ОС множество драйверов устанавливаются уже автоматически. Тем не менее, остаются устройства, софт для которых приходится устанавливать вручную. Предлагаем вашему вниманию ряд способов, которые помогут вам в решении этого вопроса.

Способ 1: Официальные сайты производителей

Для того, чтобы установить все необходимые драйвера, вам нужно поставить ПО для всех плат в вашем компьютере. Имеется в виду материнская плата, видеокарта и внешние платы (сетевые адаптеры, звуковые карты и так далее). При этом в «Диспетчере устройств» может быть не указано, что для оборудования нужны драйвера. При установке операционной системы просто использовалось стандартное ПО для устройства. Тем не менее, софт для таких девайсов необходимо устанавливать оригинальный. Большая часть всего устанавливаемого софта приходится на материнскую плату и интегрированные в нее чипы. Поэтому, сперва мы будем искать все драйвера для материнской платы, а потом уже для видеокарты.

  1. Узнаем производителя и модель материнской платы. Для этого нажимаем клавиши «Win+R» на клавиатуре и в открывшемся окне вводим команду «cmd» для открытия командной строки.
  2. В командной строке необходимо ввести поочередно команды:
    wmic baseboard get Manufacturer
    wmic baseboard get product
    Не забываем нажимать «Enter» после ввода каждой команды. В результате вы увидите на экране производителя и модель вашей материнской платы.
  3. Теперь ищем в интернете сайт производителя и заходим на него. В нашем случае это .
  4. На сайте отыскиваем поле для поиска или соответствующую кнопку в виде лупы. Как правило, нажав на эту кнопку вы и увидите поисковое поле. В такое поле необходимо ввести модель материнской платы и нажать «Enter» .
  5. На следующей странице вы увидите результат поиска. Необходимо выбрать из списка свою материнскую плату. Обычно под названием модели платы есть несколько подразделов. Если есть раздел «Драйвера» или «Загрузки» , нажимаем на название такого раздела и переходим в него.
  6. В некоторых случаях следующая страница может быть разделена на подразделы с ПО. Если это так, то ищем и выбираем подраздел «Драйверы» .
  7. Следующим шагом будет выбор операционной системы и разрядности из выпадающего списка. Обратите внимание, что в некоторых случаях в списках драйверов могут быть отличия при выборе разных ОС. Поэтому просмотрите не только ту систему, которая установлена у вас, но и версии ниже.
  8. После выбора ОС вы увидите список всего ПО, которое необходимо вашей материнской плате для взаимодействия с другими компонентами компьютера. Необходимо скачать их все и установить. Скачивание происходит автоматически после нажатия на кнопку , «Download» или соответствующую иконку. Если вы загрузили архив с драйверами, то перед установкой обязательно извлеките все его содержимое в одну отдельную папку. После этого уже устанавливайте ПО.
  9. После того как вы установите весь софт для вашей материнской платы, переходим к видеокарте.
  10. Нажимаем снова комбинацию клавиш «Win+R» и в появившемся окне вводим команду «dxdiag» . Для продолжения жмем «Enter» или кнопку «ОК» в этом же окне.
  11. В открывшемся окне средства диагностики переходим на вкладку «Экран» . Тут вы сможете узнать производителя и модель вашего графического адаптера.
  12. Если у вас ноутбук, то необходимо также перейти на вкладку «Преобразователь» . Тут вы сможете увидеть информацию о второй дискретной видеокарте.
  13. После того, как вы узнали производителя и модель вашей видеокарты, необходимо перейти на официальный сайт компании. Вот список страниц загрузок крупнейших производителей графических адаптеров.
  14. Вам необходимо на этих страницах указать модель вашей видеокарты и операционную систему с разрядностью. После этого вы сможете скачать софт и установить его. Обратите внимание, что предпочтительно устанавливать ПО для графического адаптера именно с официального сайта. Только в этом случае будут установлены специальные компоненты, которые увеличат производительность видеокарты и позволят произвести ее детальную настройку.
  15. Когда вы установите ПО для графического адаптера и материнской платы, необходимо проверить результат. Для этого открываем «Диспетчер устройств» . Нажимаем сочетание кнопок «Win» и «R» на клавиатуре, и в открывшемся окне пишем команду devmgmt.msc . После этого нажимаем «Enter» .
  16. В результате вы увидите окно «Диспетчера устройств» . В нем не должно быть неопознанных устройств и оборудования, рядом с названием которого находятся вопросительные или восклицательные знаки. Если все именно так, то все необходимые драйвера вы установили. А если такие компоненты присутствуют, рекомендуем использовать один из следующих способов.

Способ 2: Утилиты для автоматического обновления ПО

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

Вы можете использовать любую из описанных утилит. Но рекомендуем все же воспользоваться DriverPack Solution либо Driver Genius . Это программы с наибольшей базой драйверов и поддерживаемого оборудования. Мы уже рассказывали вам о том, как пользоваться DriverPack Solution.

Поэтому давайте мы расскажем вам о том, как найти и установить все драйвера с помощью программы Driver Genius. И так, начнем.

  1. Запускаем программу.
  2. Вы сразу же окажетесь на ее главной странице. Тут посередине находится зеленая кнопка «Начать проверку» . Нажимаем смело на нее.
  3. Запустится процесс сканирования вашего компьютера или ноутбука. Спустя несколько минут вы увидите список всех устройств, для которых необходимо скачать и установить ПО. Так как мы не ищем конкретный драйвер, то отмечаем галочками все имеющиеся пункты. После этого жмем кнопку «Далее» в нижней области окна программы.
  4. В следующем окне вы увидите список устройств для которых уже были обновлены драйвера с помощью данной утилиты, и те устройства, для которых ПО еще требуется закачать и установить. Последний тип устройств отмечен серым кругом рядом с названием. Для надежности нажимаем просто кнопку «Загрузить все» .
  5. После этого программа попытается подключиться к серверам для загрузки необходимых файлов. Если все пройдет удачно, вы вернетесь в предыдущее окно, где сможете отследить прогресс загрузки ПО в соответствующей строке.
  6. Когда будут загружены все компоненты, значок рядом с названием устройства станет зеленого цвета с направленной вниз стрелкой. К сожалению, установить все ПО одной кнопкой не получится. Поэтому выделяем строку с необходимым устройством и жмем кнопку «Установить» .
  7. По желанию создаем точку восстановления. Это вам предложат в следующем диалоговом окне. Выбираете ответ, соответствующий вашему решению.
  8. После этого начнется процесс установки драйвера для выбранного устройства, в ходе которого могут возникать стандартные диалоговые окна. В них необходимо просто читать лицензионные соглашения и нажимать кнопки «Далее» . Проблем на этом этапе у вас возникнуть не должно. После установки того или иного ПО вам могут предложить перезагрузить систему. Если такое сообщение будет, рекомендуем сделать это. Когда драйвер будет успешно установлен, в программе Driver Genius напротив строки с оборудованием будет зеленая галочка.
  9. Таким образом необходимо установить софт для всего оборудования из списка.
  10. В конце можете для убедительности провести сканирование компьютера еще раз. Если вы установили все драйвера, то увидите подобное сообщение.
  11. Кроме того, вы можете проверить, установлено ли все ПО, с помощью «Диспетчера устройств» как описано в конце первого способа.
  12. Если же остались еще неопознанные устройства, попробуйте следующий способ.

Способ 3: Онлайн-сервисы

Если предыдущие способы вам не помогли, остается надеяться на этот вариант. Смысл его заключается в том, что искать ПО мы будем в ручную по уникальному идентификатору устройства. Дабы не дублировать информацию, рекомендуем ознакомиться вам с нашим уроком.

В нем вы найдете детальную информацию о том, как найти ID и что с ним делать далее. А также руководство по использованию двух наиболее крупных онлайн-сервисов по поиску драйверов.

Способ 4: Ручное обновление драйвера

Этот способ является самым малоэффективным из всех приведенных выше. Однако, в очень редких случаях помочь установить софт сможет именно он. Вот что для этого необходимо.


Это самые действенные способы определить устройства, для которых необходимо установить софт. Надеемся, один из предложенных вариантов поможет вам в решении этого вопроса. Не забывайте вовремя обновлять ПО для ваших устройств. Если у вас возникнут трудности с поиском или установкой драйверов, пишите в комментарии. Вместе мы все исправим.