从Windows Inf文件中提取隐藏



我正在尝试解析Windows驱动程序安装的大量INF文件。

我有大量用于各种设备(生物识别技术,蓝牙,视频等)的驱动程序 - 所有驱动程序都有不同的创建日期和内容。我正在尝试解析这些文件,以便我可以输入文件内容并返回为USB设备的格式化的硬件ID,以及用于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, USBVID_8087&PID_0025&REV_0001
%iBT_USB% = ibtusb, USBVID_8087&PID_0025&REV_0002
;---End VID_PIDS section---

注意设备ID(USBVID_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, USBVID_0421&PID_064B
%NokiaBH907%=DriverInstall, USBVID_0421&PID_064C
[DeviceList.NTamd64]
%NokiaBH907%=DriverInstallX64, USBVID_0421&PID_064B
%NokiaBH907%=DriverInstallX64, USBVID_0421&PID_064C

这次,设备ID存储在[DeviceList][DeviceList.NTamd64]键下。

[DeviceList]
%NokiaBH907%=DriverInstall, USBVID_0421&PID_064B
%NokiaBH907%=DriverInstall, USBVID_0421&PID_064C
[DeviceList.NTamd64]
%NokiaBH907%=DriverInstallX64, USBVID_0421&PID_064B
%NokiaBH907%=DriverInstallX64, USBVID_0421&PID_064C

有了我有一些一般性问题:

  • 有什么可提取此问题的万无一失的方法?
  • 我已经意识到包含硬件ID的数据的关键名称可以在[Manufacturer]密钥中找到 - 这始终是这种情况吗?
  • 设备ID 始终第二个值?(由逗号隔开)
  • Microsoft文档/定义/向供应商推荐此行为?

如果需要澄清,请建议编辑或发表评论。

谢谢!

,作为Windows驱动程序套件的一部分,消耗InfVerif实用程序的输出可能会更容易。您无需使用Visual Studio或其他任何其他内容即可使用它。

采用/info标志,该标志以一致的格式打印设备信息。例如,在当前计算机上的随机INF文件上运行它:

xusb22.inf Information
INF Hash:       e41db3fe2103ee21
Family ID:      Microsoft-xusb22.inf
Device:         Xbox 360 Controller for Windows
Hardware ID:    USBVid_045E&Pid_028E
Service:        xusb22
Section Name:   CC_Install
Architecture:   amd64
Device:         Xbox 360 Wireless Receiver for Windows
Hardware ID:    USBVid_045E&Pid_0719
Service:        xusb22
Section Name:   CC_Install
Architecture:   amd64
Device:         Xbox 360 Controller for Windows
Hardware ID:    USBMS_COMP_XUSB10
Service:        xusb22
Section Name:   CC_Install
Architecture:   amd64
...

这是一些MSDN链接,您可能会发现有用:

INF制造商部分

INF模型部分

查看INF文件

INF文件的一般语法规则

您要查找的部分称为模型 e节,实际上是在制造商 exection中定义的 - 这在模型中提到了这一点面链接的部分文档:

必须在INF制造商中列出每个型号的名称 INF文件的部分。任何条目都可以有一个或多个条目 每个制造商模型部分,具体取决于多少个设备(和 驱动程序)INF文件为特定制造商安装。

这是已记录的 models 节语法(来自同一链接):

[models-section-name] |
[models-section-name.TargetOSVersion]  (Windows XP and later versions of Windows)
device-description=install-section-name[,hw-id][,compatible-id...]
[device-description=install-section-name[,hw-id][,compatible-id]...] ...

如果您想手动解析INF,您可能还会发现一些有用的Windows Setupapi实用程序,此处列出:

从INF文件中提取文件信息

如果您有兴趣提取仅与特定OS版本相关的信息,则这些API也可能使用:

setupDigetactualModelsSection

setupDigetactualSectionToInstallex

最后,如果您只是对硬件ID感兴趣,则使用 infverif WDK工具/info标志@Cody提到的Flag确实可能是解决问题的最佳方法,因为该工具将可以做到所有必要的解析。

最新更新