Где в xp хранятся драйвера. Создаем дистрибутив Windows XP с подобранным комплектом драйверов

Где в xp хранятся драйвера. Создаем дистрибутив Windows XP с подобранным комплектом драйверов

19.03.2019

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

Что это такое

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

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

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

Драйверы и windows

В операционных системах microsoft windows драйвер состоит из нескольких файлов, хранящихся обычно в каталогах system , system32 и их подкаталогах. Ядро драйвера хранится в файлах с расширениями.vxd , .drv , .sys и некоторых других, а дополнительные процедуры собраны в динамические библиотеки .dll . Кроме того, в состав драйвера могут входить файлы справки, утилиты, модули деинсталляции и т.д

Последовательность операций по установке и удалению драйвера хранится в специальном информационном файле .inf . С его помощью windows определяет тип, производителя, модель устройства, класс драйвера, необходимые ресурсы и файлы. В этом файле также описываются операции распаковки, запуска, копирования, удаления, переименования файлов, добавления и удаления ключей в реестре и т.д. Все.inf-файлы хранятся в каталоге inf, причем устанавливаемые драйверы не-microsoft"овского происхождения (не поставляемые в комплекте с ОС) откладываются в отдельный подкаталог inf/other .

windows умеет автоматически находить драйвер для устройства. Для этого она использует технологию plug&play , точнее, ее часть, отвечающую за самоидентификацию устройства. В частности, pci-устройства обнаруживаются bios и заносятся в виде списка в специальную область escd (extended system configuration data). windows может использовать ее, а может и самостоятельно опросить шину pci и узнать у каждого устройства коды его производителя, модели и версии, необходимые ресурсы и другую информацию. Далее проверяется база данных (файлы drvdata.bin и drvidx.bin ) по всем известным устройствам и находится необходимый.inf-файл. Если в каталоге.inf имеются новые файлы, они будут автоматически проиндексированы и внесены в базу данных.

Следует также помнить, что операционные системы windows 98 se и windows 2000, равно как и их потомки, поддерживают новую модель драйверов, получившую название wdm (windows driver model). Это - попытка реализовать полную поддержку plug&play и acpi, то есть дать возможность загружать и выгружать драйверы «на ходу», без перезагрузки системы, подключать их в виде фильтров-расширений к стандартным драйверам microsoft, более гибко управлять энергосбережением и конфигурацией устройств и т.п. wdm-драйверы хранятся в каталоге system32/drivers. В частности, интерфейсы нового поколения usb и ieee-1394 (firewire) работают только под управлением wdm-драйверов.

«Референс» или «фирменные»?

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

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

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

Версии драйверов

Как и любое другое программное обеспечение, драйверы имеют свои версии. Формат версии свободный - каждый разработчик сам решает, сколько ему нужно цифр для нумерации и в какой последовательности они должны стоять. В некоторых случаях все-таки есть система: windows-драйверы для наиболее интересных с нашей точки зрения устройств вроде игровых видео- и звуковых карт, поддерживающих directx, нумеруются определенным образом. Первая цифра - номер версии операционной системы windows. 4 = win9x/winnt, 5 = win2000. Далее после точки идет версия directx. 12 = dx7, 13 = dx8. Последние цифры - номер версии самого драйвера. Например, представленный на скриншоте драйвер для видеокарт nvidia имеет версию 4.13.01.1241, что означает предназначен для win9x и directx8, его версия - 1241

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

Иногда производители сопровождают драйвер своим инсталлятором (setup.exe, install.exe и т.п.). Тогда увидеть файлы драйвера не представляется возможным. Поищите файл readme.txt , version.txt , release.txt или что-нибудь подобное, так как в них часто тоже указаны версии файлов или всего комплекта

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

Чтобы предотвратить сбои в системе из-за бета-драйверов, microsoft ввела специальную сертификацию. Драйверы тестируются в лаборатории microsoft windows hardware quality lab (whql), и после успешного прохождения всех процедур они получают сертификат. Он имеет вид файла типа "security catalog" (расширение.cat), в котором перечислены все сертифицированные компоненты драйвера. Если такого файла в комплекте драйвера нет, то очень велика вероятность, что это бета-версия

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

Как определить производителя и модель устройства

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

Все чипы обязательно имеют маркировку, где указано название производителя, модель, серия, версия и ревизия чипа, дата выпуска. Микросхемы чипсета обычно имеют самое сложную структуру, у них большой корпус и много контактов, поэтому они больше других чипов по размерам. По маркировке, пользуясь поисковиками http://www.google.com/, http://www.altavista.com/, http://www.yandex.ru/ и другими, можно достаточно быстро отыскать сайт производителя чипсета и "reference"-драйверы.

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

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

В-третьих, если устройство устанавливается в слот pci или agp, то с помощью утилит можно определить код производителя этого устройства или чипсета. Могу порекомендовать sandra, powerstrip. Принцип, положенный в основу идентификации, базируется на анализе информации, выдаваемой pci-устройством. Как минимум можно получить коды производителя (vendor id) и модели (device id), которые поддаются расшифровке с помощью таблиц. В частности, в таблице sandra содержится более 6 тыс. кодов различных устройств

Где взять драйвер

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

Если вы точно знаете доменное имя сайта производителя (или догадываетесь - www.производитель.com, www.производитель.com.tw), то можно начинать поиск. На титульной странице отыщите кнопку "download", "drivers", "support" или аналогичную. Далее предстоит выбрать из списка именно то устройство, которое у вас имеется. Вполне возможно, что вы увидите несколько устройств с совпадающими названиями, отличия которых будут заключаться только в суффиксах или даже номерах ревизий. Обращайте на это внимание, иначе драйвер может не подойти. Далее, по возможности скачивайте драйверы не только для той операционной системы, которая у вас установлена, но и для других ОС: во время инсталляции новой windows будет неприятно обнаружить факт отсутствия необходимого драйвера.

Если вам никак не удается найти нужный сайт, обращайтесь на специализированные драйверные сайты (http://www.windrivers.com/, http://www.driverhq.com/, http://www.drv.ru/ и т.д.). Скачивать оттуда непосредственно файлы драйвера можно только в одном случае: фирма-разработчик уже прекратила свое существование и ее сайта физически нет в Сети. Гораздо лучше воспользоваться поиском не драйвера, а сайта производителя или его страницы технической поддержки.

Как установить

Установка драйвера заключается в следующем: windows обнаруживает.inf-файл, отыскивает в нем строки идентификации plug&play -устройств, и если они совпадают с информацией, выданной самим устройством, система выполняет предписанные действия по копированию файлов, добавлению записей в реестр и т.д. Вы должны указать местоположение файла в ответ на запрос мастера обновления оборудования. Мастер запускается либо автоматически, после появления сообщения о найденном устройстве, либо вручную. В последнем случае зайдите в «Свойства системы» (нажать я+pause), выбирайте закладку «Управление устройствами», потом свойства нужного устройства, закладку «Драйвер», «Обновить драйвер».

Если в комплекте с драйвером есть свой инсталлятор, то лучше воспользоваться им. Для этого нужно после появления сообщения о найденном устройстве нажать «esc», загрузить windows без драйвера и запустить инсталлятор. Он скопирует все файлы драйвера в папку windowsinfother, где драйвер и будет найден после перезагрузки. Кроме того, будут установлены дополнительные программы, идущие в комплекте. Немаловажно также и то, что в большинстве случаев инсталлятор может корректно убрать драйвер, не оставив следов своего пребывания («Панель управления»/«Установка и удаление программ»).

Как удалить вручную

Если установленный вами драйвер не справляется со своими функциями и даже вызывает ошибки и сбои, его нужно удалить. Просто нажать «del» в списке устройств, а потом дождаться сообщения о новом устройстве?.. Иногда это помогает, иногда - нет. Дело в том, что windows может следующий раз и не спросить у вас драйвер, а просто проинформировать о найденном устройстве и тут же вернуть все на место. Для удаления информации о драйвере потребуется дополнительно выйти в dos, зайти в каталог windows/inf и найти там.inf-файл нужного (точнее, уже ненужного) драйвера и удалить его. Вслед за ним можно отправить и.vxd-файлы, которые обычно находятся в windows/system, но тут нужно проявить аккуратность, так как можно и перестараться. Теперь после перезагрузки windows обновит свою базу данных и не найдет старого драйвера, а значит, можно устанавливать новый или возвращать на место старый, хорошо работавший до того, как вы начали ремонтировать то, что не сломалось

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

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

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

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

Драйверы и windows
В операционных системах microsoft windows драйвер состоит из нескольких файлов, хранящихся обычно в каталогах system, system32 и их подкаталогах. Ядро драйвера хранится в файлах с расширениями.vxd, .drv, .sys и некоторых других, а дополнительные процедуры собраны в динамические библиотеки.dll. Кроме того, в состав драйвера могут входить файлы справки, утилиты, модули деинсталляции и т.д.

Последовательность операций по установке и удалению драйвера хранится в специальном информационном файле.inf. С его помощью windows определяет тип, производителя, модель устройства, класс драйвера, необходимые ресурсы и файлы. В этом файле также описываются операции распаковки, запуска, копирования, удаления, переименования файлов, добавления и удаления ключей в реестре и т.д. Все.inf-файлы хранятся в каталоге inf, причем устанавливаемые драйверы не-microsoft’овского происхождения (не поставляемые в комплекте с ОС) откладываются в отдельный подкаталог inf/other.

windows умеет автоматически находить драйвер для устройства. Для этого она использует технологию plug&play, точнее, ее часть, отвечающую за самоидентификацию устройства. В частности, pci-устройства обнаруживаются bios и заносятся в виде списка в специальную область escd (extended system configuration data). windows может использовать ее, а может и самостоятельно опросить шину pci и узнать у каждого устройства коды его производителя, модели и версии, необходимые ресурсы и другую информацию. Далее проверяется база данных (файлы drvdata.bin и drvidx.bin) по всем известным устройствам и находится необходимый.inf-файл. Если в каталоге.inf имеются новые файлы, они будут автоматически проиндексированы и внесены в базу данных.

Следует также помнить, что операционные системы windows 98 se и windows 2000, равно как и их потомки, поддерживают новую модель драйверов, получившую название wdm (windows driver model). Это - попытка реализовать полную поддержку plug&play и acpi, то есть дать возможность загружать и выгружать драйверы «на ходу», без перезагрузки системы, подключать их в виде фильтров-расширений к стандартным драйверам microsoft, более гибко управлять энергосбережением и конфигурацией устройств и т.п. wdm-драйверы хранятся в каталоге system32/drivers. В частности, интерфейсы нового поколения usb и ieee-1394 (firewire) работают только под управлением wdm-драйверов.

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

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

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

Версии драйверов
Как и любое другое программное обеспечение, драйверы имеют свои версии. Формат версии свободный - каждый разработчик сам решает, сколько ему нужно цифр для нумерации и в какой последовательности они должны стоять. В некоторых случаях все-таки есть сисТема: windows-драйверы для наиболее интересных с нашей точки зрения устройств вроде игровых видео- и звуковых карт, поддерживающих directx, нумеруются определенным образом. Первая цифра - номер версии операционной системы windows. 4 = win9x/winnt, 5 = win2000. Далее после точки идет версия directx. 12 = dx7, 13 = dx8. Последние цифры - номер версии самого драйвера. Например, представленный на скриншоте драйвер для видеокарт nvidia имеет версию 4.13.01.1241, что означает предназначен для win9x и directx8, его версия - 1241.

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

Иногда производители сопровождают драйвер своим инсталлятором (setup.exe, install.exe и т.п.). Тогда увидеть файлы драйвера не представляется возможным. Поищите файл readme.txt, version.txt, release.txt или что-нибудь подобное, так как в них часто тоже указаны версии файлов или всего комплекта.

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

Чтобы предотвратить сбои в системе из-за бета-драйверов, microsoft ввела специальную сертификацию. Драйверы тестируются в лаборатории microsoft windows hardware quality lab (whql), и после успешного прохождения всех процедур они получают сертификат. Он имеет вид файла типа “security catalog” (расширение.cat), в котором перечислены все сертифицированные компоненты драйвера. Если такого файла в комплекте драйвера нет, то очень велика вероятность, что это бета-версия.

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

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

Производителя самого устройства найти будет легче. Во-первых, вся необходимая информация должна быть нанесена краской на печатной плате. Даже если вы не нашли названия, есть шанс определить его по fcc-номеру. Ищите строку “fcc id:”, в которой будет указан регистрационный код, присвоенный изготовителю устройства. После этого нужно зайти на сайт fcc и ввести код в строку поиска.

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

В-третьих, если устройство устанавливается в слот pci или agp, то с помощью утилит можно определить код производителя этого устройства или чипсета. Могу порекомендовать sandra, powerstrip. Принцип, положенный в основу идентификации, базируется на анализе информации, выдаваемой pci-устройством. Как минимум можно получить коды производителя (vendor id) и модели (device id), которые поддаются расшифровке с помощью таблиц. В частности, в таблице sandra содержится более 6 тыс. кодов различных устройств.

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

Если вы точно знаете доменное имя сайта производителя (или догадываетесь - www.производитель.com, www.производитель.com.tw), то можно начинать поиск. На титульной странице отыщите кнопку “download”, “drivers”, “support” или аналогичную. Далее предстоит выбрать из списка именно то устройство, которое у вас имеется. Вполне возможно, что вы увидите несколько устройств с совпадающими названиями, отличия которых будут заключаться только в суффиксах или даже номерах ревизий. Обращайте на это внимание, иначе драйвер может не подойти. Далее, по возможности скачивайте драйверы не только для той операционной системы, которая у вас установлена, но и для других ОС: во время инсталляции новой windows будет неприятно обнаружить факт отсутствия необходимого драйвера.

Если вам никак не удается найти нужный сайт, обращайтесь на специализированные драйверные сайты (http://www.windrivers.com/, http://www.driverhq.com/, http://www.drv.ru/ и т.д.). Скачивать оттуда непосредственно файлы драйвера можно только в одном случае: фирма-разработчик уже прекратила свое существование и ее сайта физически нет в Сети. Гораздо лучше воспользоваться поиском не драйвера, а сайта производителя или его страницы технической поддержки.

Как установить
Установка драйвера заключается в следующем: windows обнаруживает.inf-файл, отыскивает в нем строки идентификации plug&play-устройств, и если они совпадают с информацией, выданной самим устройством, система выполняет предписанные действия по копированию файлов, добавлению записей в реестр и т.д. Вы должны указать местоположение файла в ответ на запрос мастера обновления оборудования. Мастер запускается либо автоматически, после появления сообщения о найденном устройстве, либо вручную. В последнем случае зайдите в «Свойства системы» (нажать я+pause), выбирайте закладку «Управление устройствами», потом свойства нужного устройства, закладку «Драйвер», «Обновить драйвер».

Если в комплекте с драйвером есть свой инсталлятор, то лучше воспользоваться им. Для этого нужно после появления сообщения о найденном устройстве нажать «esc», загрузить windows без драйвера и запустить инсталлятор. Он скопирует все файлы драйвера в папку windowsinfother, где драйвер и будет найден после перезагрузки. Кроме того, будут установлены дополнительные программы, идущие в комплекте. Немаловажно также и то, что в большинстве случаев инсталлятор может корректно убрать драйвер, не оставив следов своего пребывания («Панель управления»/«Установка и удаление программ»).

Как удалить вручную
Если установленный вами драйвер не справляется со своими функциями и даже вызывает ошибки и сбои, его нужно удалить. Просто нажать «del» в списке устройств, а потом дождаться сообщения о новом устройстве?.. Иногда это помогает, иногда - нет. Дело в том, что windows может следующий раз и не спросить у вас драйвер, а просто проинформировать о найденном устройстве и тут же вернуть все на место. Для удаления информации о драйвере потребуется дополнительно выйти в dos, зайти в каталог windows/inf и найти там.inf-файл нужного (точнее, уже ненужного) драйвера и удалить его. Вслед за ним можно отправить и.vxd-файлы, которые обычно находятся в windows/system, но тут нужно проявить аккуратность, так как можно и перестараться. Теперь после перезагрузки windows обновит свою базу данных и не найдет старого драйвера, а значит, можно устанавливать новый или возвращать на место старый, хорошо работавший до того, как вы начали ремонтировать то, что не сломалось.

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

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

  • скачать готовую сборку Windows XP, в которую уже включены драйвера на многое распространенное оборудование;
  • скачать отдельный набор драйверов, благо, на просторах Интернета их много (лучше их брать на сайтах производителей оборудования).
  • сделать свою сборку Windows с теми драйверами, которые уже есть на вашем ПК, и пользоваться ею при последующих установках.

Готовые сборки удобны для неопытных пользователей, но они не могут включать в себя все существующие драйвера. Поэтому лучше всего научиться добавлять в дистрибутив Windows всё необходимое самостоятельно. Этим мы и займемся.

Итак, нам потребуется:

  • любая утилита для резервирования драйверов Виндовс;
  • программа nLite .

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

Готовим набор драйверов для своего компьютера

Резервировать драйвера, то есть сохранять их копии в отдельной папке или архиве нужно тогда, когда все оборудование вашего компьютера установлено, корректно распознано и работает стабильно. Эту операцию мы проделаем с помощью утилиты Driver Genius Professional . Для наших целей вполне хватит и триальной версии.

Обновление

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

  • Установите и запустите Driver Genius, выберите из меню пункт «Update Drivers» и свою операционную систему (Windows XP), нажмите «Next».


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


Резервирование

  • Выберите из меню опцию «Back Up Drivers». В разделе окна «Select the drivers you want to back up» отметьте то, что хотите зарезервировать (на выбор предлагаются пользовательские и принадлежащие Windows драйвера).


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


  • Далее в Driver Genius, в разделе «Backup Type and Backup Location», выберите тип хранилища (папку, zip-архив, самораспаковывающийся архив или архив для автоматической установки).
  • Укажите, где будет сохранен резервный комплект драйверов. По умолчанию копии хранятся в папке с Driver Genius, но можно выбрать любое другое место.


  • Кликнув по кнопке «Next», запустите процесс резервирования. После этого вы получите полный комплект драйверов Windows XP, подходящих для вашего компьютера.



Интеграция драйверов в дистрибутив Windows XP

Чтобы изготовить установочный диск Windows XP с собственным набором драйверов, понадобится бесплатная программа nLite, которую можно загрузить с официального сайта , и дистрибутив Windows (на диске или в виде образа ISO)

Порядок действий

  • Скачайте и установите nLite на компьютер.
  • Поместите в привод диск с Windows или смонтируйте его образ в виртуальный привод при помощи эмуляторов (Ultra ISO, Alcohol 120% и т. п.).


  • Запустите nLite. Выберите место расположения дистрибутива Windows (физический или виртуальный привод).
  • Выберите место, куда будут извлечены файлы Windows, подлежащие изменению (лучше создать новую папку).


  • После копирования диск с дистрибутивом больше не нужен. По нажатию кнопки «Далее» откроется окно предустановок nLite. Если вы используете программу в первый раз, это окно будет пустым, поэтому пропустим его и пойдем дальше.


  • В следующем окне из списка задач выбираем «Интегрировать» и «Драйвера».


  • Далее, нажав кнопку «Добавить», нужно выбрать необходимые драйвера (как вы помните, они хранятся в папке, созданной Driver Genius). Программа предложит добавить одиночный драйвер или папку. Для добавления одного драйвера нужно указать путь к его файлу.inf (эти файлы содержат инсталляционные данные).


  • Выбрав папку драйверов, достаточно указать на нее в проводнике.


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


  • Теперь дистрибутив с вашим комплектом драйверов можно записать на диск или создать установочный ISO-образ. Поместите в привод чистый DVD, выберите его в списке «Устройства» следующего окна nLite, установите нужные параметры прожига диска и нажмите кнопку «Запись».
  • Если вы планируете позже еще что-то добавлять в созданный дистрибутив, нажмите «Далее». Так вы сможете в любое время, например, обновить драйвера в установочном наборе.


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

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

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

Но кого сейчас удивишь установкой драйверов? Этот процесс настолько уже хорошо знаком всем пользователям ПК по многолетней практике, что некоторые, я уверен, могут делать это с закрытыми глазами:) Но задумывались ли Вы о деталях этого процесса, размышляли ли Вы когда-нибудь над алгоритмом установки драйвера ? Задавались ли вопросом, какие именно действия выполняет операционная система в момент подключения нового устройства и инсталляции драйверов?

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

  • Копирование двоичного файла драйвера в соответствующий каталог в системе;
  • Регистрация драйвера в системе Windows с указанием метода загрузки;
  • Добавление необходимой информации в системный реестр;
  • Копирование/установка связанных вспомогательных компонентов из пакета драйвера;

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

  • Пользователь инсталлирует в выключенный компьютер новое устройство. В этом случае, сам процесс обнаружения нового устройства и инсталляции драйвера начинается уже на этапе загрузки операционной системы.
  • Пользователь с правами локального администратора, при помощи оснастки "Диспетчер устройств" инициирует установку либо обновление драйвера для какого-либо уже установленного устройства.
  • Пользователь "на ходу" подключает к работающему компьютер новое устройство. В этом случае речь идет об определенной категории устройств, которые могут подключаться "на лету", таких как устройства с внешним интерфейсом eSata , USB и прч. Ведь Вы же не будете инсталлировать внутреннюю видеокарту, когда питание подано на слоты PCIe ? Я лично такого пока еще не вытворял:)
  • Пользователь самостоятельно запускает программу установки комплекта пакета драйвера из-под учетной записи с правами локального администратора. Такой способ может использоваться как для установки драйверов для физических устройств, которые поддерживают стандарт Plug and Play, так и для установки не-PnP (legacy) драйверов, которые не могут быть автоматически обнаружены системой и которые не могут быть проинсталлированы иначе как в ручном режиме. Характерным примером могут быть антивирусы или виртуальные машины, которые инсталлируют свои драйвера логических устройств в систему.
  • Пользователь щелкает правой кнопкой мыши на .inf -файле в директории с драйвером и выбирает пункт Установить из-под учетной записи с правами локального администратора.

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

  • .inf -файл(ы). Файл, описывающий процесс инсталляции драйвера. Ключевой компонент установочного пакета драйвера. inf -файл состоит из инструкций, которые указывают Windows как именно устанавливается драйвер: описывают устанавливаемое устройство, исходное и целевое местонахождение всех компонентов драйвера, различные изменения, которые необходимо внести в реестр при установке драйвера Windows, информацию о зависимостях драйвера и прочее. .inf -файлы связывают физическое устройство с драйвером, контролирующим данное устройство.
  • Двоичный файл(ы) драйвера. Пакет, как минимум, должен содержать .sys - или .dll -файл ядра драйвера.
  • Исполняемые файлы установки. Обычно это всем хорошо уже знакомые утилиты инсталляции, которые имеют имена setup.exe , install.exe и некоторые другие.
  • Исполняемые файлы удаления. Обычно это утилиты деинсталляции, которые имеют имена uninstall.exe .
  • Файл(ы) дополнительных процедур и библиотек. Обычно это вспомогательные библиотеки формата .dll , соинсталляторы.
  • .cat -файл(ы). Файл каталога, подписанный цифровой подписью. Данные файлы содержат цифровые подписи каталогов и играют роль сигнатуры для файлов пакета, с помощью которой пользователь может определить происхождение пакета и проверить целостность файлов пакета драйвера. Требуются в 64-битных версиях Windows, начиная с Vista и более поздних и рекомендуются для всех остальных.
  • Модули управления пользовательского режима. Обычно это различные командные апплеты, работающие в пользовательском режиме, такие как ATI Catalist Control Center, VIA HD Audio Desk, Realtek HD Audio Control Panel и аналогичные.
  • Файлы справок. Куда же без них то?

Термины и определения

В данной статье я приведу описание только одного метода установки, который, в любом случае, описывает практически все этапы алгоритма установки драйвера в Windows, которые применимы и к другим способам. И разговор у нас сейчас пойдет о ситуации, когда пользователь вставляет во внутренний разъем выключенного компьютера новое оборудование, например видеокарту. Но для начала введем некоторые, необходимые нам в процессе изучения алгоритма установки драйвера, определения.
Менеджер (диспетчер) Plug and Play (PnP Manager, PnP Менеджер) - облако кода режима ядра и пользовательского режима, отвечающее за добавление, распознавание, удаление устройств в системе. Блок режима ядра взаимодействует с остальными компонентами системы в процессе загрузки/установки программного обеспечения, необходимого для обслуживания имеющихся в системе устройств. Блок пользовательского режима (%Windir%\System32\umpnpmgr.dll , запускается в контексте главного системного процесса svchost.exe) отвечает за взаимодействие с пользователем в ситуациях, требующих установки новых драйверов или настройки рабочих параметров в уже инсталлированных. Отвечает за назначение и последующее распределение аппаратных ресурсов, таких как прерывания (IRQ), порты ввода-вывода, каналы прямого доступа к памяти (DMA) и адреса памяти. Имеет функционал определения драйвера, требуемого для поддержки определенного устройства и функционал загрузки/инсталляции данного драйвера. Умеет распознавать новые устройства, реагировать на их подключение и отключение. Является частью кода исполнительной подсистемы Windows.

Перечисление устройств

Целиком стадию загрузки с самого ее начала описывать смысла нет, и мы начнем с только с интересующего нас этапа, на котором модуль Winload(.efi) загружает ядро операционной системы Windows 7 из файла ntoskrnl.exe . Ядро запускает PnP менеджер, являющийся частью исполнительной подсистемы. PnP менеджер стартует процесс перечисления устройств с корневого устройства, драйвера виртуальной шины под названием ROOT (Корень), который олицетворяет собой всю систему и представляет из себя драйвер шины вообще для всех PnP- и не-PnP-устройств, а так же HAL (уровня аппаратных абстракций). HAL на этом этапе функционирует как драйвер шины, который перечисляет устройства, напрямую подключенные к материнской плате. Однако, HAL вместо фактического перечисления полагается на описание оборудования, уже присутствующее в реестре. Цель HAL на данном этапе - обнаружить первичные шины, такие как PCI . Драйвер первичной шины PCI, в свою очередь, перечисляет устройства, подключенные к данной шине, находит другие шины, для которых PnP менеджер тут же загружает драйвера. Эти драйвера шин, в свою очередь, обнаруживают уже устройства на своих шинах. Данный рекурсивный процесс перечисления, загрузки драйверов и последующего перечисления, продолжается пока все устройства в системе не будут обнаружены и сконфигурированы. В процессе перечисления PnP менеджер строит дерево устройств (device tree), которое однозначно описывает отношения между всеми устройствами системы. Узлы этого дерева, именуемые devnodes (сокр. от "узлы устройств"), содержат информацию об объекте устройства, который, в свою очередь, подробно описывает устройство.
Записи всех устройств, которые были обнаружены с момента инсталляции системы, хранятся в кусте реестра HKLM\SYSTEM\CurrentControlSet\Enum . Подключи этого куста описывают устройства в следующем формате:

HKLM\SYSTEM\CurrentControlSet\Enum\ Enumerator\ DeviceID\ InstanceID

HKLM\SYSTEM\CurrentControlSet\Enum\

  • Enumerator - наименование драйвера шины. Может принимать значения: ACPI , DISPLAY , HDAUDIO , HID , HDTREE , IDE , PCI , PCIIDE , Root , STORAGE , SW , UMB , USB , USBSTOR и другие;
  • DeviceID - уникальный идентификатор для данного типа устройств;
  • InstanceID - уникальный идентификатор различных экземпляров одного и того же устройства.

Дело в том, что драйвер шины, к которой подключено устройство, запрашивает у устройства различные параметры (идентификатор производителя, устройства, ревизии и прч) и формирует так называемый аппаратный идентификатор (HardwareID), который однозначно описывает устройство и представляет из себя строку параметров, разделенных знаками & и состоящую из следующих частей:

  • Префикс, описывающий шину, к которой подключено устройство.
  • Идентификатор устройства. Состоит из нескольких частей, таких как идентификатор производителя, идентификатор продукта (модели), ревизия устройства.

HardwareID - идентификационная строка, зависящая от параметров устройства (производитель, модель, ревизия, версия и прч), которую Windows использует для сопоставления устройства с.inf-файлом драйвера.

Типичная структура HardwareID:

PCI\VEN_10DE&DEV_1341&SUBSYS_2281103C&REV_A2

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

Идентификаторы HardwareID и CompatibleID используются кодом исполнительной подсистемы Windows для поиска драйвера устройства.

Обнаружение драйверов

Если на этапе перечисления устройств и загрузки драйверов, PnP менеджер режима ядра обнаруживает устройство, с которым не сопоставлен драйвер, он запрашивает драйвер шины, на которую подключено новое устройство, и получает идентификаторы HardwareID и, опционально, CompatibleID устройства. PnP менеджер режима ядра специальным событием информирует PnP менеджер пользовательского режима о том, что данное устройство требует инсталляции, передавая ему полученные идентификаторы. PnP менеджер пользовательского режима сначала пробует автоматически установить устройство без вмешательства пользователя. Для этого PnP менеджер пользовательского режима запускает утилиту rundll32.exe для запуска мастера установки драйверов устройств (%Windir%\System32\Newdev.dll ).

Мастер установки драйверов устройств инициирует поиск подходящего для устройства драйвера по информации из всех inf -файлов системы, расположенных в следующих доверенных системных расположениях:

  • Хранилище драйверов;
  • Центр обновления Windows;
  • Системный каталог INF-файлов;

Для вышеописанных целей поиска и установки драйвера используются функции библиотек setupapi.dll (функции поддержки инсталляции) и cfgmgr32.dll (менеджер конфигурации). В процессе поиска используются полученные уже на данный момент идентификаторы HardwareID и (опционально) CompatibleID , значения которых описывают все возможные варианты идентификации оборудования в файле инсталляции драйвера, то есть inf -файле. Значения идентификаторов устанавливаемого устройства сравниваются с теми, что описаны в секциях Models зарегистрированных в системе inf -файлов. Списки идентификаторов упорядочены, поэтому более специфичные описатели оборудования представлены в списках первыми. Если совпадения идентификаторов были найдены в нескольких inf -файлах, более точное совпадение считается предпочтительным по отношению к менее точному совпадению, подписанные inf -файлы предпочитаются неподписанным, и подписанные позднее inf -файлы предпочитаются подписанным ранее. Если совпадение на основе HardwareID не найдено, то используются CompatibleID , в случае наличия, конечно же. Если совпадение не найдено на основе CompatibleID , мастер установки оборудования может вывести приглашение на указание местоположения свежего драйвера оборудования. Давайте более подробно рассмотрим все указанные источники информации о драйверах.

Хранилище драйверов

Мастер установки драйверов пытается обнаружить подходящий inf -файл в системном хранилище драйверов, располагающемся в каталоге %Windir%\System32\DriverStore , который содержит все без исключения драйвера системы, входящие в состав дистрибутива Windows, полученные через службу "Windows Update", либо инсталлированные в систему пользователем.

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

Хранилище драйверов было впервые введено в Windows Vista. Перед установкой любого драйвера в систему, сначала специализированный код проверяет цифровую подпись драйвера, затем синтаксис inf -файлов драйвера, затем привилегии текущего пользователя, только после этого помещает все компоненты драйвера в системное хранилище драйверов. А вот затем уже драйвер, находящийся в хранилище драйверов, может быть использован для установки устройств в системе. Поскольку процедура помещения драйвера в хранилище достаточно проработана, хранилище драйверов и является самым доверенным источником информации о драйверах.

Системный каталог INF-файлов

Параллельно система ищет драйвер в системном расположении, описываемом значением параметра DevicePath , находящемся в ветке реестра HKLM\Software\Microsoft\Windows\CurrentVersion . Обычно параметр имеет значение %SystemRoot%\inf , что в большинстве систем эквивалентно местоположению C:\Windows\inf .

INF Файл

Хотелось бы сделать небольшое отступление и отдельно поговорить об информационных файлах пакета драйвера. inf -файл является одним из ключевых компонентов комплекта драйверов. В нем хранится последовательность операций по установке и удалению драйвера, описанная специальными директивами, указывающими на расположение файлов функционального драйвера. Файл содержит команды, которые добавляют в реестр информацию, отвечающую за перечисление (Enum) драйвера и его класса (Class), и могут содержать указания для мастера установки оборудования по запуску так называемых основных установщиков (Class Installer, Установщик класса) и дополнительных установщиков (CoInstaller, Cоинсталлятор) для класса устройств и непосредственно устройства. Дополнительно inf -файл определяет тип, производителя, модель устройства, класс драйвера, необходимые файлы и ресурсы.

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

Немаловажная особенность соинсталляторов заключается в том, что они, в случае необходимости выполняют привязку экземпляров нового устройства к требуемым для работы протоколам. Это, к примеру, может касаться разного рода коммуникационных устройств, которым требуются для работы различные протоколы и транспорты, такие как ndis , pppoe , tcpip , tcpip6 , smb , netbt .
В .inf -файле дополнительно описываются операции распаковки, копирования, запуска, переименования файлов, добавления и удаления ключей в реестре и многое другое.
Однако вернемся к главному алгоритму установки драйвера в Windows. В случае, когда установщик драйверов устройств не нашел подходящих драйверов в перечисленных выше локациях, система маркирует устройство как неопознанное.

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

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

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

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

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

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

Для тестирования драйверов и их подписания была сформирована лаборатория Microsoft Windows Hardware Quality Lab (WHQL), обстоятельно тестирующая драйвера, поставляемые с дистрибутивами Windows, а так же драйвера от крупных поставщиков оборудования. Для всех остальных разработчиков драйверов предусмотрены процедуры получения возможности самостоятельно подписывать драйвера на платной основе. Когда драйвер проходит все тесты WHQL , он становится "подписанным". Это означает, что для драйвера WHQL формирует хэш, или уникальную сигнатуру, однозначно идентифицирующую файлы драйвера, и затем подписывает ее с применением криптографических алгоритмов при помощи специального закрытого ключа Microsoft, используемого для подписания драйверов. Подписанный хэш помещается в каталоговый файл (.cat -файл), который размещается непосредственно в директории пакета драйвера.
В процессе инсталляции драйвера, PnP менеджер пользовательского режима извлекает сигнатуру драйвера из .cat -файла, расшифровывает сигнатуру используя публичный ключ Microsoft и сравнивает результирующий хэш с хэшем файла инсталлируемого драйвера. Если хэши совпадают, драйвер маркируется как прошедший WHQL тестирование. Если сигнатуру не удается проверить, PnP менеджер действует в соответствии с настройками системной политики подписи драйверов, либо запрещая инсталляцию драйвера, либо все же позволяя инсталлировать драйвер.

Создание резервной копии

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

Инсталляция драйвера

На этом этапе пакет драйвера стороннего разработчика развертывается в системное хранилище драйверов. Затем, система выполняет фактическую инсталляцию драйвера из хранилища драйверов, которая производится посредством утилиты %Windir%\System32\drvinst.exe . На этом этапе происходят следующие события:

  • inf -файл драйвера копируется в специализированную папку %Windir%/inf . Для драйверов сторонних разработчиков характерно переименование файла в OEMx.inf , где x - порядковый номер inf -файла в директории.
  • Код операционной системы фиксирует факт инсталляции inf -файла в реестре.
  • Создается узел устройства в реестре по пути HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\\\ , который содержит подробную информацию об устройстве.
  • Двоичные файлы драйвера копируются в целевую папку %Windir%\System32\DRIVERS и, возможно, другие целевые папки. Обновляются разделы реестра.
  • Формируется ключ реестра, соответствующий драйверу: HKLM\SYSTEM\CurrentControlSet\Services\имя_драйвера . Формируются параметры ключа.
  • Формируется ключ реестра, отвечающий за логгирование событий драйвера, размещающийся в ветке HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System\имя_драйвера .
  • PnP менеджер вызывает процедуру DriverEntry для каждого установленного только что драйвера. Затем PnP менеджер режима ядра пытается "запустить" драйвер, подгружая его в память и вызывая процедуру AddDevice драйвера для информирования самого драйвера о присутствии устройства, для которого он был загружен.

Расположение информации о драйверах

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

Общие журналы драйверов

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

  • %Windir%\setupact.log -- содержит сообщения отладки от инсталлятора драйверов режима ядра, который представляет собой Win32 DLL, сопровождающую процесс установки устройства;
  • %Windir%\inf\setupapi.app.log -- содержит сообщения процесса инсталляции приложений;
  • %Windir%\inf\setupapi.dev.log -- содержит сообщения процесса инсталляции устройств;

Журнал драйвера

Если Вы используете Диспетчер пакетов (Package Manager, pkgmgr) для инсталляции/деинсталляции пакета, который (в свою очередь) инсталлирует, обновляет, либо деинсталлирует драйвер, то у Вас есть возможность включить (с целью отладки) создание специального лог-файла drivers.log , который будет содержать только ошибки, специфичные для конкретного драйвера. Для создания этого журнала, создайте/задайте следующий ключ реестра, и затем запустите pkgmgr снова. После этого, в директории, откуда был запущен pkgmgr , будет создан файл drivers.log .
Ветка: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Device Installer
Ключ: DebugPkgMgr
Тип: DWord
Значение: 1

%Windir%\inf

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

%Windir%\System32\DRIVERS

Это директория в файловой системе Windows, где размещаются непосредственно файлы драйверов. В современных операционных системах, а я говорю сейчас о Windows Vista и более поздних, драйвера в данной директории имеют расширения .sys в подавляющем своем большинстве, реже встречаются dll -файлы, однако общего смысла это не меняет, поскольку, вне зависимости от расширения, все они идентичны по структуре .dll -файлам. В более ранних операционных системах встречались такие форматы как.drv и.vxd .

%Windir%\System32\DriverStore

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

HKLM\SYSTEM\CurrentControlSet\Enum

Куст реестра, содержащий информацию об устройствах, имеющихся в системе. PnP менеджер создает здесь ключ для каждого устройства в формате HKLM\SYSTEM\CurrentControlSet\Enum\Enumerator\deviceID . где Enumerator - это описанный выше в статье идентификатор шины, полученный на этапе перечисления устройств, deviceid - идентификатор типа устройств. Ключ содержит следующую информацию: описание устройства, аппаратные идентификаторы (Hardware ID), идентификаторы совместимых устройств (Compatible ID) и требования к ресурсам. Куст зарезервирован для использования исключительно кодом операционной системой, поэтому пользовательским приложениям и драйверам не рекомендуется напрямую взаимодействовать с ним, предлагается использовать документированные системные функции.

HKLM\SYSTEM\CurrentControlSet\Control

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

  • Class содержит информацию о классах инсталляции устройств, которые используются для группировки устройств, конфигурируемых и устанавливаемых схожим образом. Для каждого класса инсталляции в составе этого ключа имеется ключ, имя которого совпадает с именем GUID соответствующего класса инсталляции.
  • CoDeviceInstallers содержит информацию о соинсталляторах класса
  • DeviceClasses содержит информацию об интерфейсах устройств, зарегистрированных в системе. любой драйвер, который хочет взаимодействовать в системе с программами режима пользователя, должен предоставить интерфейс. Класс интерфейса устройства предоставляет функциональные возможности устройства и его драйвера другим системным компонентам и приложениям режима пользователя.

HKLM\SYSTEM\CurrentControlSet\Services

Куст реестра, который используется для размещения информации обо всех сервисах (драйверах) в системе. Каждый системный драйвер размещает достаточно важную глобальную информацию о себе в подключах вида HKLM\SYSTEM\CurrentControlSet\Services\<Имя_драйвера> , которая используется драйвером в процессе инициализации на этапе загрузки системы. Куст активно используется PnP менеджером для передачи параметров при вызове процедуры инициализации драйвера.
В этом кусте размещаются такие элементы:

  • ImagePath - содержит полный путь в двоичному файлу (образу) драйвера. программа инсталляции заполняет это значение на основе данных из inf -файла пакета драйвера;
  • Parameters - хранит индивидуальную информацию драйвера, заполняется на основе данных, размешенных в inf -файле пакета драйвера;
  • Performance - информация для мониторинга производительности устройства, контролируемого драйвером. Указывает имя DLL мониторинга производительности и имена функций, экспортируемых данной DLL. Заполняется на основании данных, полученных из inf -файла;

HKLM\SYSTEM\CurrentControlSet\HardwareProfiles

Куст реестра, который содержит информацию об аппаратных профилях системы и предназначен для поддержки данной технологии. Аппаратный профиль это всего-лишь набор изменений в стандартной аппаратной конфигурации и конфигурации сервисов (original configuration), загружаемых при старте системы. Содержит специфические изменения исходного, основного профиля оборудования, сконфигурированного в двух разделах реестра: HKLM\SOFTWARE и HKLM\SYSTEM . Не используется в Windows 7, хотя ключи реестра остались, вероятно в целях совместимости.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows