windows - 从 Windows INF 文件中提取 HID
问题描述
我正在尝试为 Windows 驱动程序安装解析大量 INF 文件。
我收集了大量适用于各种设备(生物识别、蓝牙、视频等)的驱动程序——所有这些驱动程序都有不同的创建日期和内容。我正在尝试解析这些文件,以便我可以输入文件内容并返回硬件 ID ,该硬件 ID对于 USB 设备和PCI 和 PCI-E 设备的格式如下所示。
我的问题是,这些值在相应的 INF 文件中的位置似乎没有任何特定的顺序或标准化。
例如,这个来自 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---
请注意设备 ID ( USB\VID_8087&PID_0025
) 是如何存储在[Device.NTamd64.10.0...16299]
密钥下的。
在此特定行上:%COMPANY_NAME% = Device,NTamd64.10.0...16299
设备 ID 设置为等于%COMPANY_NAME%
并由itbtusb,
但是,如果我将此布局与诺基亚蓝牙驱动程序进行比较,例如,它是完全不同的:
[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
这次,设备 ID 存储在[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
有了这个,我有一些一般性的问题:
- 有没有万无一失的方法来提取这个?
- 我已经意识到可以在密钥中找到包含硬件 ID 的数据的密钥名称
[Manufacturer]
——总是这样吗? - 设备 ID总是第二个值吗?(用逗号分隔)
- Microsoft 是否为供应商记录/定义/推荐这种行为?
如果需要澄清,请提出编辑建议或发表评论。
谢谢!
解决方案
使用作为Windows Driver KitInfVerif
一部分提供的实用程序的输出可能更容易。您无需安装 Visual Studio 或其他任何东西即可使用它。
它需要一个/info
标志,以一致的格式打印设备信息。例如,在我当前机器上的随机 inf 文件上运行它:
xusb22.inf Information
INF Hash: e41db3fe2103ee21
Family ID: Microsoft-xusb22.inf
Device: Xbox 360 Controller for Windows
Hardware ID: USB\Vid_045E&Pid_028E
Service: xusb22
Section Name: CC_Install
Architecture: amd64
Device: Xbox 360 Wireless Receiver for Windows
Hardware ID: USB\Vid_045E&Pid_0719
Service: xusb22
Section Name: CC_Install
Architecture: amd64
Device: Xbox 360 Controller for Windows
Hardware ID: USB\MS_COMP_XUSB10
Service: xusb22
Section Name: CC_Install
Architecture: amd64
...
推荐阅读
- javascript - TypeError:response.json 不是函数。(在 'response.json()' 中,'response.json' 未定义)
- mongodb - MongoDB 客户端字段级加密 (CSFLE) 限制对未加密集合的操作
- android - Android 问题:: 发现多个文件与操作系统无关路径 'androidsupportmultidexversion.txt' “错误”
- python-3.x - 从谷歌下载多张图片
- swift - Swift Combine:在订阅级别或接收级别处理异步?
- 3d - 向 3D 模型添加自定义属性?
- mysql - 为什么从 Python 的 unittest 运行时写入 MySQL 无法持久?
- linux - 使用 Shell 脚本在日志文件中提取具有自己时间戳的不可预测数据
- keycloak - Keycloak :: 您的登录尝试超时。登录将从头开始
- python - 将滚动条添加到选项卡 PYQT5