以往Windows Update(WU)在进行驱动推送时,都是依据HWID(Hardware ID)进行的,机器上每个设备,比如声卡、网卡、触控芯片等等,都有自己的HWID。但WU却无法对不同型号的机器进行区别。比如同一款声卡,它可能被安装在联想S330这款机器上,也可能被安装在华硕A200这款机器上,WU在进行驱动推送时只能针对这一款声卡推送同样的驱动,却做不到对联想和华硕推送不同的驱动。
但从win10开始WU在进行驱动程序的推送时,不仅依然HWID,还会依据CHID(Computer Hardware ID)进行机器型号的辨别。CHID是早就存在的东西,只是在win10才开始被应用于WU推送。它是依据SMBIOS中的一些信息,比如Manufacturer、Family、ProductName、SKU Number等等,生成的一个GUID,不同类型的信息组合可以生成多个CHID,比如下表中WIN10上组合生成CHID的规则:(https://msdn.microsoft.com/en-us/library/windows/hardware/ff552325(v=vs.85).aspx)
HWID | Windows 10 |
---|---|
HardwareID-0 | Manufacturer + Family + Product Name + SKU Number + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release |
HardwareID-1 | Manufacturer + Family + Product Name + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release |
HardwareID-2 | Manufacturer + Product Name + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release |
HardwareID-3 | Manufacturer + Family + Product Name + SKU Number + Baseboard Manufacturer + Baseboard Product |
HardwareID-4 | Manufacturer + Family + Product Name + SKU Number |
HardwareID-5 | Manufacturer + Family + Product Name |
HardwareID-6 | Manufacturer + SKU Number + Baseboard Manufacturer + Baseboard Product |
HardwareID-7 | Manufacturer + SKU Number |
HardwareID-8 | Manufacturer + Product Name + Baseboard Manufacturer + Baseboard Product |
HardwareID-9 | Manufacturer + Product Name |
HardwareID-10 | Manufacturer + Family + Baseboard Manufacturer + Baseboard Product |
HardwareID-11 | Manufacturer + Family |
HardwareID-12 | Manufacturer + Enclosure Type |
HardwareID-13 | Manufacturer + Baseboard Manufacturer + Baseboard Product |
HardwareID-14 | Manufacturer |
CHID的获取可以依靠微软提供的computerhardwareids.exe工具,也可以从注册表中获取,具体路径为: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SystemInformation\ComputerHardwareIds
另外SMBIOS在注册表中的路径为:HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS
驱动发布到WU时,微软提供了一种“测试发布”模式,在这种模式下,一般的机器是收不到WU的推送的,只有在注册表中添加了特定的键值的机器才能收到WU的推送,这样一来便于内部进行测试。具体的注册表修改方法如下:
1、打开注册表,并导航至:HKLM\Software\Microsoft;
2、新建Subkeys DriverFlighting ---> Partner
3、在Partner子键下新建TargetRing,并设置值为:Drivers;