设备识别,驱动选择安装过程

当 插入一个设备到系统,插入设备的总线检测出这个设备的设备标识符,并通知管理中心添加了这个设备。这个设备标识符是作为一类设备的区别其他类型设 备的特征,必须根据它去检测是否有合适的驱动。驱动的安装信息是由INF文件控制,在INF文件中有一个域标识出驱动适合的设备的设备标识符,因此搜 索过程也就是搜索符合条件的INF文件。

在哪些地方搜索呢?在(Windows Server 2003, Windows XP, and Windows 2000) 中,首先搜索的路径有两个:1、windows INF文件夹;2、注册表中的DevicePath 键值路径(以DevicePath 作为关键词搜索注册表就能找到)。从这里也能推断出安装驱动后,INF文件会被拷贝到这两个路径下。

在搜索的时候,系统会给每个符合条件的驱动进行匹配度排名,最后排名最前的驱动就被选择。至于如何进行排名,这里就不赘述,可以参考http://msdn.microsoft.com/en-us/library/aa477008.aspx

如果在上面的过程中搜索不到合适的安装INF文件,系统就会弹出找到新的硬件设备向导页面,需要用户选择驱动所在的位置。如果搜索到合适的INF文件,系统会选择排名最前的驱动进行安装,到此,整个搜索和选择过程就完成了。

下面以插入一个未安装驱动的设备后,系统搜索和选择驱动的过程为例,从程序员的角度去分析这个过程。

1、当用户态PnP管理中心接收到新设备的驱动安装命令后,创建一个新的进程并调用newdev.dll进行驱动安装;

2、newdev.dll调用 SetupDiBuildDriverInfoList 创建一个设备驱动链,就进行驱动搜索并找到所有可能的驱动,这就是上面所说的驱动搜索过程。由于是第一次安装,会返回一个空的驱动链,因此newdev.dll会弹出找到新的设备向导,要求用户选择驱动所在的路径,用户选择完毕,再次调用 SetupDiBuildDriverInfoList 创建新的设备驱动链。

3、newdev.dll调用SetupDiCallClassInstaller 发送一系列的DIF请求,包括:DIF_SELECTBESTCOMPATDRV , DIF_ALLOW_INSTALL , DIF_INSTALLDEVICEFILES , DIF_REGISTER_COINSTALLERS , DIF_INSTALLINTERFACES , DIF_INSTALLDEVICE .。从命令可以看出处理DIF_SELECTBESTCOMPATDRV 请求就是选择最匹配驱动的过程,调用SetupDiEnumDriverInfo SetupDiGetDriverInstallParams 分别例举驱动及其参数,并调用SetupDiSetSelectedDriver 选择驱动。

最新回复(0)
/jishuv_2FWLOmfBoWc_2B8hWsgpdBULmfobr4qCZUJGkNv6qh6cg_3D4858482
8 简首页