Windows驱动
+ -

Windows驱动安装过程

2022-02-09 212 0

手动安装驱动程序,把sys/inf等文件安装到系统中.

winddk示例目录src/setup/devcon提供了预安装驱动的方法。编译后,可以通过devcon install path_to_inffile hwid的方式安装驱动程序或通过devcon update path_to_inffile hwid的方式更新驱动,前者是后者的扩展。devcon update调用newdev.dll!UpdateDriverForPlugAndPlayDevices函数实现驱动程序的更新。调用时传入inf文件的路径和inf文件中的DeviceId即可。但是按ms文档的说明,UpdateDriverForPlugAndPlayDevices只能为已存在的设备更新驱动,也就所谓的Hardware-first安装方式。

cmdInstall,它是如何实现驱动程序预安装的。在设备插入系统前,系统没有设备信息,因此cmdInstall所做的是虚拟出一个设备(在root下虚拟一个设备),并将它注册到系统注册表中去。

cmdInstall先调用SetupDiGetINFClass,从inf文件中获取设备类GUID。然后将获得的设备类Guid传递给SetupDiCreateDeviceInfoList用以创建设备信息块列表和SetupDiCreateDeviceInfo创建设备信息块。这个很好理解,windows将属性相近的设备归入同一个设备类,如usb类,hid类。系统应该用一个列表维护设备类中的各个设备,除此之外系统中应该还有一个像面向对象语言中基类一样的描述符,用以描述设备类的属性(我按代码猜的,毕竟windows的pnp管理器没公开)。现在要在这个设备类下创建一个新设备,那必定要获得设备类的描述符,并添加新设备属性—-这个设备的HardwareID(就如派生类除了有基类的公共属性还有自己特有的属性),然后往设备类列表中添加新设备。SetupDiSetDeviceRegistryProperty完成新设备的注册工作。一切完成后,还要调用类安装器做设备类安装时的相似工作(如设置注册表,拷贝文件等),这个动作反应到代码中就是调用SetupDiCallClassInstaller。现在虚拟的设备已经存在了,就可以调用UpdateDriverForPlugAndPlayDevices更新驱动了。这些过程完成了我们的目标——预安装驱动程序。

cmdInstall函数很强大,可以预安装总线驱动/功能驱动和简单的过滤驱动,如果inf文件中提供了hardwareID。

0 篇笔记 写笔记

Windows驱动安装过程
手动安装驱动程序,把sys/inf等文件安装到系统中.winddk示例目录src/setup/devcon提供了预安装驱动的方法。编译后,可以通过devcon install path_to_inffile hwid的方式安装驱动程序或通过devcon update path_to_inffile......
DevCon install命令实现
先创建设备,然后再执行的是devcon update命令,即调用cmdUpdate函数int cmdInstall(_In_ LPCTSTR BaseName, _In_opt_ LPCTSTR Machine, _In_ DWORD Flags, _In_ int argc, _In_read......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!