首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
VC安装驱动详细解释
时间:
2015-01-27 16:26:05
阅读:
172
评论:
0
收藏:
0
[点我收藏+]
标签:
最近用C++写了一款类似android手机助手的产品,其中的一个模块功能是检测与监测android设备的设备ID,根据设备ID检索驱动并进行安装。因此搜索了好多关于驱动安装的资料,现整理如下:
驱动分为WDM式和NT式两种驱动,我所理解的两者区别:
1. WDM由.inf文件加载,NT通过服务手动加载
2. WDM支持即插即用,NT不支持即插即用
3. WDM通过
注册表指定挂载那个驱动,NT可通过寻找不同的设备对象指定挂载
进一步可了解:
http://blog.sina.com.cn/s/blog_5371d2790100djku.html
驱动的安装方式大至有二种(方法很多种):
1,在插上设备的时候进行安装,即使用函数UpdateDriverForPlugAndPl
ayDevice
()。我用的就是这种方法
2,在没有物理设备的时候安装,即通常所说的驱动预安装(SetupCopyOEMInf)。
方法3
3.
DefaultInstall方法
dos运行 rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 test.inf
具体可查询MSDN,上面说的很详细,也可参考如下资料:
http://www.360doc.com/content/11/0912/14/2406028_147664842.shtml
http://www.52rd.com/Blog/Detail_RD.Blog_xjl20008_8591.html
方法4
4. 把驱动文件都打入安装包,由安装包来自动执行(这个方法我没有详细了解)
需要注意的是:
1. SetupCopyOEMInf()只是生成一个oem*.inf文件和oem*.pnf文件到Windows\inf\文件夹中, 即没有修改任何注册表,也没有复制文件。生成的pnf文件包含源文件路径信息,以便在真正 插上设备的时候能够找到相应的sys等文件。 这个方法是在设备没有插入的情况下,即可执行操作。在设备插入后,系统会弹窗提示用户是否安装驱动,用户选择是后,才会进行该设备驱动的安装
2. UpdateDriverForPlugAndPl
ayDevice()在没有插上设备的时候是会执行失败的。此方法为静默安装,即在安装过程中,不会弹出任何提示窗口,安装完后,我们可以通过设备管理器看到该设备为可以使用状态。
UpdateDriverForPlugAndPl
ayDevice()方式源码:
http://blog.sina.com.cn/s/blog_5d51f4e90101afg2.html
这个源码是比较通用的,是根据DDK下面的安装驱动的例子源码一样的。当然,当我们在调用这个源码中的接口时,我们最好是已经确认待安装的设备ID在.inf文件中是存在的,即这个驱动是支持这个设备的。这个确认的过程就需要用到SetupAPI系列函数来进行设备ID的获取和.inf文件的解析,这块网上也有很多源码,如果有需要源码的可以联系我:QQ 24716177
注意事项:
众所周知,windows程序目前主要分为32位和64位两种(在编译器中可以设定),对于64位的PC机,一定要用64位的程序来进行安装,当然了,32位机器一定要用32位的程序来进行安装,否则会安装失败。
例如用UpdateDriverForPlugAndPl
ayDevice进行安装时,会返回一个非常大的负数-87554...
并且用GetLastError()获取不到错误码。之前在一个网站看到一个老外纠结这个问题纠结了好久,最后竟然说好像是因为inf文件格式不对,看来老外也有这么笨的技术人员。
如果我们不知道用户的PC是多少位的,就应该做64位和32位两个版本的驱动安装程序,在调用安装程序之前,判断一下当前系统的位数,再启用对应位数的安装程序。
上面的注意事项,大家一定要注意!!!
参考过的资料:
http://bbs.csdn.net/topics/320020273
http://bbs.csdn.net/topics/190082352
http://bbs.csdn.net/topics/60192108
http://bbs.csdn.net/topics/60192108
http://bbs.csdn.net/topics/390372266
http://bbs.csdn.net/topics/330055489
http://blog.sina.com.cn/s/blog_5371d2790100djku.html
http://hi.baidu.com/alalmn/item/752818ab8caa2ba928ce9d76
http://www.52rd.com/Blog/Detail_RD.Blog_xjl20008_8591.html
http://www.360doc.com/content/11/0912/14/2406028_147664842.shtml
SetupAPI系列函数大全:
http://msdn.microsoft.com/en-us/library/windows/hardware/ff549791(v=vs.85).aspx
VC安装驱动详细解释
标签:
原文地址:http://blog.csdn.net/jiangqin115/article/details/43195345
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!