如何代码安装驱动
发布网友
发布时间:2022-04-21 20:43
我来回答
共1个回答
热心网友
时间:2022-05-23 15:47
UpdateDriverForPlugAndPlayDevices
该函数可以完成两件事
1:安装驱动,只要指定inf文件及设备ID
2:检查指定设备ID的设备是否插入(usbdetect.dll可能就是通过该函数完成的)
*****************************************************
问:如何和一个硬件设备交互?即如何打开一个设备?
答:通过设备的符号链接打开设备。
设备的符号链接含义:
"//?/hid#vid_093a&pid_2510#6&1da905e4&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
|----1---|-----------2--------------|------------3--------------|-----------------------------4------------------------|
第一部分:何种总线的设备 eg ROOT, //?/hid
第二部分:当前设备硬件的名称 eg zhangfandevice, vid_093a&pid_2510
第三部分:当前设备硬件的第几个设备 eg:6&1da905e4&0&0000,可以同时插上好几个相同的设备硬件,不同的设备的这个域不同
第四部分:当前设备硬件所属的设备接口的GUID
eg:电脑上同时插入两个相同的2代硬件:
分别显示:
"//?/usb#vid_0471&pid_0668#6&2ea1fb62&0&1#{77f49320-16ef-11d2-ad51-006097b514dd}"
"//?/usb#vid_0471&pid_0668#6&3822C75E&0&1#{77f49320-16ef-11d2-ad51-006097b514dd}"
这两个设备的差别就在序号上,这个序号可能是系统随机分配的。
通过任务管理器,可以看到这两个设备的名字一样,都是TOLTech xeyez 2.0
右键查看详细信息-如下:
USB/VID_0471&PID_0668/6&2ea1fb62&0&1
USB/VID_0471&PID_0668/6&3822C75E&0&1
设备接口GUID, 设备ID, 兼容ID等概念:
1:设备接口:即GUID,
1.1)多个设备可以具有相同的GUID。
eg不同的HID鼠标键盘设备具有相同的GUID。
eg不同不同的识别器硬件具有相同的GUID。
1.2)GUID存在于inf文件的前几行。
[Version]
Signature="$CHICAGO$"
Class=USB //用于指示设备装好后出现在设备管理器中的那个分支下
ClassGUID={36FC9E60-C465-11CF-8056-444553540000} // xeyez1代2代3代的GUID,和周立同的一样
Provider=%Provider%
CatalogFile=xeyez.cat
DriverVer=05/15/2009,1.1.0.0
1.3)安装驱动时,这个信息无用。可用于SetupDiXXX函数通过该GUID查找属于该GUID的设备。然后可以通过查找到的信息创建句柄和设备通信。
2:设备ID
2.1)也即硬件id HardwareID eg vidpid
2.2)硬件自身含有自己的vidpid信息。该信息可用于帮组系统定位inf文件,然后根据inf的指示安装驱动
3:兼容ID
3.1)硬件自身含有自己的兼容ID信息,该信息可用于帮组系统定位inf文件,然后根据inf的指示安装驱动
eg hid兼容的usb鼠标就是通过提供兼容id来实现免驱的。
4:驱动程序.sys文件是否和设备接口GUID一一对应?
答:不对应。.sys里面不含有GUID,vidpid,兼容id等任何信息。
5:系统如何为新插入的usb硬件安装驱动?
系统通过usb设备的设备id,和兼容id,然后寻找相匹配的inf文件,然后安装inf文件记载的sys文件。
(至于该sys文件是否真的可用,系统可不管,要不不可用,就会导致蓝屏!)
举例1:从不同的鼠标可以免驱直接使用。是因为这些HID鼠标虽然vidpid不同,系统中也没有对应vidpid的inf文件,但它们具有相同的兼容id,系统中含有该兼容id的inf文件,可以顺利的找到驱动并安装成功。
举例2:不同的识别器硬件pidvid不一样,兼容id也不一样,所以安装失败了。需要对应vidpid的inf才能装上。