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

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


Герои 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_w7x64_912.2\ Audio_w7x64_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_w7x64_912.2\ Audio_w7x64_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_w7x64_912.2\Audio_w7x64_912.2\3\1\ Audio_w7x64_912.2\Audio_w7x64_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 =«5x64»;
  • XP x86 =«5x86»;
  • Vista x64 =«6x64|NTx64|AllNT|67x64»;
  • Vista x86 =«6x86|NTx86|AllNT|67x86»;
  • Windows 7 x64 =«7x64|NTx64|AllNT|67x64|78x64|781x64|7819x64»;
  • Windows 7 x86 =«7x86|NTx86|AllNT|67x86|78x86|781x86|7819x86»;
  • Windows 8 x64 =«8x64|NTx64|AllNT|78x64|All8x64»;
  • Windows 8 x86 =«8x86|NTx86|AllNT|78x86|All8x86»;
  • Windows 8.1 x64 =«81x64|NTx64|AllNT|781x64|7819x86|All8x64»;
  • Windows 8.1 x86 =«81x86|NTx86|AllNT|781x86|7819x86|All8x86»;
  • Windows 9 x64 =«9x64|NTx64|AllNT|7819x64|All8x64|81x64»;
  • Windows 9 x86 =«9x86|NTx86|AllNT|7819x86|All8x86|81x86»;
  • Windows 10 x64 =«10x64|NTx64|AllNT|78110x64|All8x64»;
  • Windows 10 x86 =«10x86|NTx86|AllNT|78110x86|All8x86»;
  • Все 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.

Комментарии (6)


  1. gotch
    28.04.2015 11:57
    +1

    Подскажите, а возможно ли извлечение драйверов из работающей ОС и формирование driver pack?


    1. ArtX Автор
      28.04.2015 12:03
      +3

      Конечно, это и есть пользовательский драйвер-пак.


  1. UUSER
    28.04.2015 12:12
    +1

    del


  1. drsmoll
    28.04.2015 13:33
    +2

    Что-то график мне не очень понятен <=п/2, странный он какой-то. :-)


    1. AndreyDmitriev
      28.04.2015 13:48

      Silicon Valley dick jerk algorithm
      (график на 2:40)


    1. YouraEnt
      28.04.2015 14:05
      +1

      Нежели это случайность.