Драйвер-паки и их индексы

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

22463dd883ca40de8786d39ed05801a0.jpgГерои Silicon Valley работают над оптимизацией собственных алгоритмов

Как строится пользовательский индекс драйверовДля каждого устройства в системе есть свой уникальный номер (DevID).Он отображается как в установках Windows, так и в программе DriverPack Solution. Уникальный для каждого устройства идентификатор (однозначно характеризующий каждое устройство), используется программой для автоматического «подбора» драйвера к нему.База данных в программе содержит ID всех устройств, самостоятельно отслеживает версии драйверов для них, сопоставляет их версии и актуальность. В случае наличия в базе более новой версии, программа автоматически предлагает установить для устройства новый драйвер. Можно найти драйвер для конкретного устройства и самостоятельно в интернете, выбрав соответствующий режим поиска драйвера.

Для эффективной работы программы необходимы архивы драйверов (в формате »7z»), а для быстрого поиска по ним, требуется проиндексировать файлы, содержащиеся внутри.

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

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

Для того, чтобы выбрать «нужные» файлы, требуется в распакованных файлах найти один с расширением *.inf.Именно он содержит (в секции [SourceDisksFiles]) перечень необходимых файлов, по которому и требуется скопировать список файлов в предварительно созданную пользователем папку.

Примечание: если среди распакованных файлов нет .inf-файла, то автоматическое создание пакета драйверов невозможно. Настоятельно не рекомендуется удалять файлы с расширением *.САТ — сведения о цифровой подписи.

Как было раньше До 2010 года, пока версий Windows было чуть меньше, нами использовался следующий метод создания индекса к сборке драйверов.Создается папка D (сокр. от «Drivers»), а драйверы помещаются в любую подпапку внутри директории D.Имя подпапки (поддиректории) может быть любым, однако рекомендуется использовать максимально короткие имена. Стоит избегать длинных путей к файлам — это может привести к ошибкам и помешать установке.

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

В созданных папках драйверы разделяются по производителям, тем самым образуя подпапки.Названия производителей также рекомендуется максимально сокращать. Например: «NVidia» — «N», «ATi» — «A» и т. д. Внутри папки с именем производителя драйверы располагаются в папках 1–9, при необходимости число папок может быть увеличено. После создания необходимой структуры папок поместите ваши драйверы в соответствующие подпапки (примечание: распакованные файлы, .inf-файлы, но не архивы или программы установки).

Название папки Английское название Пояснение A Additions Дополнения B Broadband Широкополосные сетевые устройства (*DSL-модемы и им подобные) C Chipset Наборы системной логики (чипсеты) CPU Central processor unit Центральный процессор (необходим для AMD K8) D Dial-Up Модемы G Graphics Видеоадаптеры (Графические карты) L LAN Сетевые адаптеры M Mass Storage Контроллеры жестких дисков P Printers Принтеры S Sound Звуковые адаптеры VMWare VMWare Драйверы для виртуальной машины VMWare W WLAN Беспроводные адаптеры U USB USB-устройства (флешки, фотокамеры) Y Misc Разное (Все что не попало в другие разделы) Y Monitor Мониторы Z Hid Устройства ввода (Интелектуальные мыши, клавиатуры тачпады и т.п.) Процесс создания (пользовательских) пакетов драйверов После создания структуры папок с новыми драйверами требуется заархивировать созданную папку (в примере — это папка «D») в соответствии с требованиями программы к архиву.Имя архива: «DP_НазваниеПакетаДрайверов_ x86–32_ВерсияПакетаДрайверов. 7z» Требования: имя архива не должно содержать пробелов. Например, название пакета драйверов версии 9.06 для контроллеров жестких дисков должно быть таким: «DP_MassStorage_x86–32_906.7z.» Формат архива: 7z Уровень сжатия: «Ultra» (для обеспечения максимальной компрессии, при желании вы можете указать меньший уровень сжатия). Метод сжатия: «LZMA» (значение установлено по умолчанию, изменять его не рекомендуется). Размер словаря: 32 Mb Размер слова: 256.Последнее установлено по умолчанию. Можно увеличить или уменьшить значение этого параметра. Увеличение данного параметра позволяет достичь большей компрессии, но требует больше времени для создания архива.

Индексные файлы хранятся в *.txt — формате, и находятся папке «Indexes», а не в «dev_db», как было ранее.

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

Содержимое индексного файла для 1-го: — «PCI\VEN_8086&DEV_24D5&SUBSYS_680316F3 Audio_w7×64_912.2\ Audio_w7×64_912.2\3\1\Alcwdm18.inf Realtek.NTamd64 06/19/2009,6.0.1.6305 Realtek AC'97 Audio»

Содержимое индексного файла для 2-го: — «HDAUDIO\FUNC_01&VEN_10DE&DEV_8067 Audio_w7×64_912.2\ Audio_w7×64_912.2\11\1\nvhda.inf VIDIA.NTamd64 11/11/2009,1.00.00.63 NVIDIA High Definition Audio»

Более развернуто объяснение структуры приведено в таблице:

Элементы структуры Драйвер 1 Драйвер 2 Device ID (идентификатор устройства) PCI\VEN_8086&DEV_24D5&SUBSYS_680316F3 HDAUDIO\FUNC_01&VEN_10DE&DEV_8067 Путь хранения драйвера в архиве Audio_w7×64_912.2\Audio_w7×64_912.2\3\1\ Audio_w7×64_912.2\Audio_w7×64_912.2\11\1\ Название inf-файла Alcwdm18.inf nvhda.inf Тип Realtek.NTamd64 NVIDIA.NTamd64 Дата выпуска и версия 06/19/2009,6.0.1.6305 11/11/2009,1.00.00.63 Название устройства Realtek AC'97 Audio NVIDIA High Definition Audio Текущие реалии Сегодня жесткой привязки к структуре индекса нет, что называется, «свободный стиль».Главное — это использовать маркеры операционных систем. Дополнительно есть маркеры для, практически, всех производителей ноутбуков.При этом расположение и название папок и подпапок перестало иметь значение, единственное требование — наличие минимально одного маркера системы.

Фактически же маркер — конкретное название папки. Оно видно в названии одного из подкаталогов драйвер-пака: DRP\Drivers\DP_Chipset_14101.7z\Intel\WinAll\Chipset\9.4.0.1007_HECI\

В данном случае «WinAll» значит «все версии Windows».

Маркеры Версия Windows = маркер (имя подпапки), характеризующий, что драйвер который находится внутри папки-маркера подходит для указанной ОС.XP x64 =»5×64»; XP x86 =»5×86»; Vista x64 =»6×64|NTx64|AllNT|67×64»; Vista x86 =»6×86|NTx86|AllNT|67×86»; Windows 7×64 =»7×64|NTx64|AllNT|67×64|78×64|781×64|7819×64»; Windows 7×86 =»7×86|NTx86|AllNT|67×86|78×86|781×86|7819×86»; Windows 8×64 =»8×64|NTx64|AllNT|78×64|All8×64»; Windows 8×86 =»8×86|NTx86|AllNT|78×86|All8×86»; Windows 8.1×64 =»81×64|NTx64|AllNT|781×64|7819×86|All8×64»; Windows 8.1×86 =»81×86|NTx86|AllNT|781×86|7819×86|All8×86»; Windows 9×64 =»9×64|NTx64|AllNT|7819×64|All8×64|81×64»; Windows 9×86 =»9×86|NTx86|AllNT|7819×86|All8×86|81×86»; Windows 10×64 =»10×64|NTx64|AllNT|78110×64|All8×64»; Windows 10×86 =»10×86|NTx86|AllNT|78110×86|All8×86»; Все x64 =«Allx64»; Все x86 =«Allx86»; Все XP =«AllXP»; Все Vista =«All6»; Все Windows 7 =«All7»; Все Windows 8 =«All8»; Все Windows 8.1 =«All81»; Все Windows 9 =«All9»; Все Windows 10 =«All10»; Любые Windows =«WinAll»; Маркеры ноутбуков Маркер-папка с названием производителя ноутбука = слово, используемое самим производителем для идентификации его ноутбуковAcer_nb = acer / emachines / packard*bell / gateway / aspire Apple_nb = apple Asus_nb = asus Dell_nb = dell / alienware / arima / jetway / gericom Fujitsu_nb = fujitsu / siemens Gigabyte_nb = gigabyte HP_nb = hp / compaq Lenovo_nb = lenovo / compal / ibm LG_nb = lg MSI_nb = msi / micro-star NEC_nb = nec Panasonic_nb = panasonic / matsushita Samsung_nb = samsung Sony_nb = sony / vaio Toshiba_nb = toshiba OEM_nb = другие вендоры (benq / clevo / depo / durabook / ecs / elitegroup / eurocom / getac / intel / iru / k-systems / medion / mitac / mtc / nokia / pegatron / prolink / quanta / sager / shuttle / twinhead / rover / roverbook / viewbook / viewsonic / vizio / wistron и т.д.) Текущий индекс Если при скачивании с нашего сайта обновленных драйвер-паков их имена файлов совпадают (например, старый и новый файл имеет имя «DP_Chipset_14112.7z»), можно просто заменить старые файлы новыми.При наличии такого же файла, но с меньшим номером, его можно удалить: скачали «DP_Chipset_14112.7z», но в папке есть «DP_Chipset_14111.7z» — файл с меньшим номером версии «DP_Chipset_14111.7z» можно удалить.Индексируем новые драйвер-паки (создаем списки поддерживаемых устройств).Если старые индексы удалены, то при запуске DRP, программа автоматически попросит вас произвести индексацию новых драйвер-паков — например программа для нового драйвер-пака «DP_Chipset_14112.7z» создает файлы-индекса «DP_Chipset_14112_xxx.xxx» в соответствующей папке в «X:\DRP\Indexes\».

Можно также удалить и старые индексы.В папке «Indexes» необходимо удалить все файлы старого драйвер-пака.Имени файла индекса соответствуют имя драйвер-пака и найти его легко. Например, вы скачали драйвер-пак «DP_Chipset_14112.7z», а у вас был «DP_Chipset_14111.7z», соответственно удаляем все файлы-индексы «DP_Chipset_14111_xxx.xxx», если же и скаченный и старый драйвер-пак имеют одинаковое имя например «DP_Chipset_14112.7z», то индексы «DP_Chipset_14112_xxx.xxx» также нужно удалить т.к. список поддерживаемых устройств в новой версии драйвер-пака может отличаться.

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

Надеемся, что данное руководство по созданию индекса драйверов будет полезно не только разработчикам DriverPack Solution.

© Habrahabr.ru