Я пытаюсь проанализировать большое количество файлов INF для установки драйверов Windows.
У меня есть большая коллекция драйверов для различных устройств (биометрия, Bluetooth, видео и т. Д.) - все с разными датами создания и содержанием.
Я пытаюсь проанализировать эти файлы так, чтобы я мог ввести содержимое файла и вернуть Идентификатор оборудования , который отформатирован как this для USB-устройств и this для Устройства PCI и PCI-E.
Моя проблема в том, что, похоже, не существует какого-либо определенного порядка или стандартизации для размещения этих значений в соответствующем INF-файле.
Например, этот драйвер Bluetooth от Intel начинается следующим образом:
[Version]
Signature = "$WINDOWS NT$"
Class = Bluetooth
ClassGuid = {e0cbf06c-cd8b-4647-bb8a-263b43f0f974}
Provider = %PROVIDER_NAME%
CatalogFile = ibtusb.cat
DriverVer = 07/06/2018,20.70.1.1
[SourceDisksNames]
1=%SOURCEDISK1%,,,
[SourceDisksFiles]
ibtusb.sys = 1
ibtfw.dat = 1
[DestinationDirs]
ibtusb.Copy = 12 ; drivers
firmware.Copy = 12
;
; Driver Information
;
[Manufacturer]
%COMPANY_NAME% = Device,NTamd64.10.0...16299
[Device.NTamd64.10.0...16299]
;---Start VID_PIDS section---
%iBT_USB% = ibtusb, USB\VID_8087&PID_0025&REV_0001
%iBT_USB% = ibtusb, USB\VID_8087&PID_0025&REV_0002
;---End VID_PIDS section---
Обратите внимание, как идентификатор устройства (USB\VID_8087&PID_0025
) хранится под ключом [Device.NTamd64.10.0...16299]
.
В этой конкретной строке: %COMPANY_NAME% = Device,NTamd64.10.0...16299
Идентификатор устройства установлен равным %COMPANY_NAME%
и отделяется itbtusb,
Однако, если я сравню этот макет с драйвером Nokia Bluetooth, например, он будет совершенно другим:
[Version]
Signature="$Windows NT$"
Class=CustomUSBDevices
ClassGuid={a503e2d3-a031-49dc-b684-c99085dbfe92}
Provider=%Manufacturer%
CatalogFile=%DriverBaseName%.cat
DriverVer=05/15/2012,2.4.0.4
[ClassInstall32]
AddReg=ClassInstall_AddReg
[ClassInstall_AddReg]
HKR,,,,%DeviceManagerCategory%
HKR,,Icon,,"-20"
[Manufacturer]
%Manufacturer%=DeviceList, NTamd64
[ControlFlags]
ExcludeFromSelect=*
[DeviceList]
%NokiaBH907%=DriverInstall, USB\VID_0421&PID_064B
%NokiaBH907%=DriverInstall, USB\VID_0421&PID_064C
[DeviceList.NTamd64]
%NokiaBH907%=DriverInstallX64, USB\VID_0421&PID_064B
%NokiaBH907%=DriverInstallX64, USB\VID_0421&PID_064C
На этот раз идентификатор устройства сохраняется под клавишами [DeviceList]
и [DeviceList.NTamd64]
.
[DeviceList]
%NokiaBH907%=DriverInstall, USB\VID_0421&PID_064B
%NokiaBH907%=DriverInstall, USB\VID_0421&PID_064C
[DeviceList.NTamd64]
%NokiaBH907%=DriverInstallX64, USB\VID_0421&PID_064B
%NokiaBH907%=DriverInstallX64, USB\VID_0421&PID_064C
С этим у меня возникли общие вопросы:
- Есть ли какие-нибудь надежные методы для извлечения этого?
- Я понял, что имена ключей для данных, содержащих идентификатор оборудования, можно найти в ключе
[Manufacturer]
- это всегда так?
- Всегда ли идентификатор устройства является вторым значением? (через запятую)
- Документирует ли / определяет / рекомендует ли Microsoft такое поведение для поставщиков?
Если требуется уточнение, предложите отредактировать или оставить комментарий.
Спасибо!