VC安装驱动详细解释

最近用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,在插上设备的时候进行安装,即使用函数UpdateDriverForPlugAndPlayDevice()。我用的就是这种方法

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. UpdateDriverForPlugAndPlayDevice()在没有插上设备的时候是会执行失败的。此方法为静默安装,即在安装过程中,不会弹出任何提示窗口,安装完后,我们可以通过设备管理器看到该设备为可以使用状态。

UpdateDriverForPlugAndPlayDevice()方式源码:

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位的程序来进行安装,否则会安装失败。

例如用UpdateDriverForPlugAndPlayDevice进行安装时,会返回一个非常大的负数-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

时间: 2024-11-13 09:44:46

VC安装驱动详细解释的相关文章

VC安装驱动源码

WDM式驱动源码: #include "stdafx.h" #include <tchar.h> // Make all functions UNICODE safe. #include <newdev.h> // for the API UpdateDriverForPlugAndPlayDevices(). #include <setupapi.h> // for SetupDiXxx functions. #include "inst

我对CONTAINING_RECORD宏的详细解释

宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的指针来推算出该结构体的指针! 下面从一个简单的例子开始说起: 我们定义一个结构体, 同时类型化: typedef struct{ int a; int b; int c; }ss; 这是一个很简单的结构体, 没什么特殊的, 稍微分析下该结构体: 结构体的大小(字节):4+4+4=12字节 成员a的偏移:0 成员b的偏移:4 成员c的偏移:8 我们用ss来定义一个变量: ss s

445port入侵详细解释

445port入侵详细解释   大约"445port入侵"内容445port入侵详细解释网站搜索许多其他的"445port入侵"内容 445port入侵,以前我们先来看看或445port早干嘛去了,成为侵入port呢?445port就是IPC 服务的默认port                                                            ipc$一 摘要 二 什么是 ipc$ 三 什么是空会话 四 空会话能够做什么 五 ip

[软考]挣值管理EVM详细解释及应用,实例讲解收集(信息系统项目管理师-成本管理)

开场白 由于最近工作很忙,挣值管理这部分早就看完了,就是没有时间整理,今天抽出时间整理好了发出来和大家一起学习.这里要记住英文缩写的意义及公式,注意实例中的问题使用哪个公式来解决,可以自己再多找些练习,熟能生巧. 文章由简入繁,由浅入深,再加上自己的理解,其中难免有纰漏,若路过此处的同行发现错误或有更好的解题思路,请不吝赐教. 挣值管理(Earned ValueManagement,EVM)项目的挣值管理是用与进度计划.成本预算和实际成本相联系的三个独立的变量,进行项目绩效测量的一种方法.它比较

SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释

SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释 2016-04-14 23:40 13030人阅读 评论(2) 收藏 举报 分类: SSM(7) 这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文件并没有进行过多的说明,很多人知其然不知其所以然,经过几天的搜索和整理,今天总算对其中的XML配置文件有了一定的了解,所以拿出来一起分享一下,希望有不足的地方大家批评指正~~~ 首先   这篇文章暂时只对框架中所要用到的配置文件进行解

cc2540 usbdongle 安装驱动失败的终极解决方法 【原创,多图】

安装说明参考openssl源码文件夹下INSTALL.W32 step1 环境搭建 安装perl,Visual Studio 2008 下载Openssl最新版源码.我下的版本为OpenSSL-1.0.0g. step2 启动Visual Studio 2008 Command Prompt 运行bin\vcvars32 设置 环境变量 注意: 如遇反馈"此处不应该有/Microsoft",参考错误1. step3 VS命令行窗口cd至openssl源码文件夹 执行以下命令 $perl

hive-0.11.0安装方法具体解释

先决条件: 1)java环境,须要安装java1.6以上版本号 2)hadoop环境,Hadoop-1.2.1的安装方法參考hadoop-1.2.1安装方法具体解释 本文採用的hadoop是hadoop-1.2.1.hive採用的是hive-0.11.0 hive有三种安装模式: 内嵌模式:元数据保持在内嵌的Derby模式.仅仅同意一个会话连接 本地独立模式:在本地安装Mysql,把元数据放到Mysql内 远程模式:元数据放置在远程的Mysql数据库 内嵌模式安装: 1.上传并解压hive-0.

MTP设备无法安装驱动的解决办法

1,进入设备管理器右击带黄色问号的MTP,选择“属性”,“详细信息”“设备范例 ID”(用Ctrl+C复制). 2,找到c:\windows\inf\wpdmtp.inf打开(或者通过运行打开),找到[Generic.NTx86]%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP[Generic.NTamd64]%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP 3,将2中的USB\MS_COMP_MTP更改为1中复制的

INF 右键安装驱动以及卸载

INF 右键安装驱动以及卸载 之前写过一篇文章是关于INF文件详解的,大家可以参看INF文件详解,这次写的是关于INF右键安装,这样比较方便.卸载的话也是一句话,可以大大减少安装时间: 先将INF文件内容贴上来: ; OsnDf.inf ; ; Installation file (.inf) for Infocore Corporation OsnDiskCopy driver. ; ; (c) Copyright 2007-2008 Infocore Corporation ; [Versi