设为首页 加入收藏

TOP

Windows驱动匹配详解(一)
2017-10-11 18:12:45 】 浏览:1414
Tags:Windows 驱动 匹配 详解

 

在Windows下,几乎所有的硬件设备都需要安装驱动后才能正常工作,我们重装系统后第一件事就是要为各设备安装好驱动,我们可以下载官方驱动手动安装,也可以让我Windows自动扫描安装,还可以使用驱动精灵、电脑管家之类的工具帮我们安装,为了发挥硬件设备最好的性能,我们还需要及时把驱动升级到最新的版本。那么,这些工具是如何为硬件设备匹配到最佳的驱动的呢?此文就这个问题一探究竟。

驱动匹配相关信息

设备都是通过hardware ID进行标识,一个设备一般有多个hardware ID和compatible ID,这些ID对设备的标识程度按照顺序依次降低,我们可以在Windows设备管理器中查看到设备的硬件Id和兼容Id。

 

Windows下的驱动必须包含一个信息文件(INF)以进行安装,INF文本文件包含设备安装组件(device installation components)安装驱动所必需的所有信息。从INF文件中可以提取驱动匹配所需的信息:

(1)驱动提供商

(2)驱动类型

(3)驱动的日期和版本

(4)驱动的特征值,用来衡量驱动对设备特征的支持程度

(5)驱动支持的操作系统版本和硬件平台

(6)驱动支持的设备的hardware ID和compatible ID

设备和驱动的标识匹配是指设备的hardware ID或compatible ID与驱动INF文件指定的hardware ID或compatible ID的匹配,匹配程度从高到低有以下4中类型:

(1)设备的hardware ID和INF的hardware ID匹配,匹配程度由设备的hardware ID的位置确定。

(2)设备的hardware ID和INF的compatible ID匹配,匹配程度由设备的hardware ID的位置确定。

(3)设备的compatible ID和INF的hardware ID匹配,匹配程度由设备的compatible ID的位置确定。

(4)设备的compatible ID和INF的compatible ID匹配,匹配程度由设备的compatible ID的位置和INF的compatible ID的位置确定,前者的优先级高。

驱动签名在驱动的匹配中也起着很关键的作用,签名的排序优先级如下:

(1)有微软签名的,包括:

        * 优先级别 (Premium) 和标准级别 (Standrd) 的 WHQL 签名;

        * Inbox 驱动签名 ( Signatures for inbox drivers ) ;

        * 可靠驱动签名 (DRS, Driver Reliability Signature);

        * SE 签名 (Windows Sustained Engineering);

        * 老版本 Windows 的 WHQL 签名;

(2)有效代码签名,系统管理员可以设定安全策略来指定受信任的根证书颁发的微软代码签名证书的签名等同于微软签名;

(3)没有签名的驱动,但 INF DDInstall 中有 .nt后缀;

(4)没有签名的驱动,但 INF DDInstall 中没有 .nt后缀;

(5)没有签名或签名有问题而无法确认是否有签名的驱动。

驱动匹配规则

驱动安装工具在服务器端存储了大量的驱动,对于同一个设备可能有多个驱动都合适,那么哪个驱动再是最佳的呢?驱动匹配时就是按照如下匹配规则来选择最佳的驱动:

(1)客户端上报设备ID(hardware ID和compatible ID)的有序列表,操作系统版本,硬件平台。

(2)结合设备ID,操作系统版本,硬件平台与驱动库进行匹配,得到所有可用的驱动,若无可用的驱动,则匹配失败。

(3)选择签名最佳的驱动。

(4)选择特征最佳的驱动。

(5)选择匹配类型最佳的驱动。

(6)选择日期最新的驱动。

(7)选择版本最高的驱动。

(8)选择任一驱动。

 

驱动信息提取方法

前面提到驱动所支持的硬件等信息都是保存在INF文件中,为了能快速匹配驱动,就需要把这些信息先从INF文件中提取出来,下面就详细说明驱动信息的提取方法

 

1.基本信息的提取

Version section出现在INF文件最开始的位置,每一个INF文件都必须包含这个section。

[Version]

Signature="signature-name"

[Class=class-name]

[ClassGuid={nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}]

[Provider=%INF-creator%]

[LayoutFile=filename.inf [,filename.inf]... ]  (Windows 2000 and Windows XP)

[CatalogFile=filename.cat]

[CatalogFile.nt=unique-filename.cat]

[CatalogFile.ntx86=unique-filename.cat]

[CatalogFile.ntia64=unique-filename.cat]  (Windows XP and later versions of Windows)

[CatalogFile.ntamd64=unique-filename.cat]  (Windows XP and later versions of Windows)

DriverVer=mm/dd/yyyy[,w.x.y.z]

[DontReflectOffline=1] (Windows Vista and later versions of Windows)

[PnpLockDown=0|1] (Windows Vista and later versions of Windows)

[DriverPackageDisplayName=%driver-package-description%]

[DriverPackageType=PackageType]

(1)Signature必须是$Windows NT$或$Chicago$,表明在所有Windows系统下是可用的。

(2)Class指定使用该INF文件安装驱动的设备类型,关于类型的详细信息参考http://msdn.microsoft.com/en-us/library/windows/hardware/ff553426(v=vs.85).aspx

(3)Provider指定驱动的提供商,%INF-creator%在Strings section中定义。

(4)DriverVer指定驱动的日期和版本。日期是所有文件的最新日期,日期的格式为mm/dd/yyyy或mm-dd-yyyy,年必须包含4个数字,月和日必须包含2个数字;版本w.x.y.z是可选的,如果指定了版本,则w

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇win7 64位下vs不能以管理员身份运.. 下一篇Python中的Numpy、SciPy、MatPlot..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目