如何安装一个设备驱动程序[转]

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

本质上,安装驱动需要依靠UpdateDriverForPlugAndPlayDevices这个函数。它需要的参数其实不多,主要是INF文件路径等。

BOOL WINAPI
UpdateDriverForPlugAndPlayDevices(
HWND  hwndParent,
LPCTSTR  HardwareId,
LPCTSTR  FullInfPath,
DWORD  InstallFlags,
     PBOOL  bRebootRequired OPTIONAL
);
执行这个函数相当于在设备管理器右键菜单上点击“扫描检测硬件改动”。它会查找当前已经添加到系统中但可能还没有安装驱动程序的硬件设备。由于没有对应的硬件,因此我们要另想办法,让它能检测到虚拟硬件的存在。

为此,我们需要创建一设备信息块,并将它弄到系统注册表中去。

创建设备信息块的函数是SetupDiCreateDeviceInfo

WINSETUPAPI BOOL WINAPI
SetupDiCreateDeviceInfo(
  IN HDEVINFO  DeviceInfoSet,
  IN PCTSTR  DeviceName,
  IN LPGUID  ClassGuid,
  IN PCTSTR  DeviceDescription,   OPTIONAL
  IN HWND  hwndParent,   OPTIONAL
  IN DWORD  CreationFlags,
     OUT PSP_DEVINFO_DATA  DeviceInfoData   OPTIONAL
  );

这个函数需要7个参数,其他的都好办,无非是设备ID字符串,设备GUID等,还有一个用于输出的结构体,记住填写其中的size字段,其余为0就可以了。问题是第一个参数HDEVINFO需要用另一个函数SetupDiCreateDeviceInfoList来创建。如果GUID不想写死,想通过INF读取,则需要另一个函数SetupDiGetINFClass。

HDEVINFO
SetupDiCreateDeviceInfoList(
  IN LPGUID  ClassGuid,   OPTIONAL
  IN HWND  hwndParent   OPTIONAL
  );

WINSETUPAPI BOOL WINAPI
SetupDiGetINFClass(
  IN PCTSTR  InfName,
  OUT LPGUID  ClassGuid,
  OUT PTSTR  ClassName,
  IN DWORD  ClassNameSize,
  OUT PDWORD  RequiredSize  OPTIONAL,
  );

以上函数调用的顺序是:SetupDiGetINFClass获取GUID,SetupDiCreateDeviceInfoList创建设备信息块列表,SetupDiCreateDeviceInfo创建设备信息块。完成这些步骤之后,我们就可以注册设备了。首先,我们要调用SetupDiSetDeviceRegistryProperty这个函数来设置设备在系统设备树上的路径,然后通过SetupDiCallClassInstaller这个函数来注册:


WINSETUPAPI BOOL WINAPI
SetupDiSetDeviceRegistryProperty(
   IN HDEVINFO  DeviceInfoSet,
   IN OUT PSP_DEVINFO_DATA  DeviceInfoData,
   IN DWORD  Property,
   IN CONST BYTE  *PropertyBuffer,
   IN DWORD  PropertyBufferSize
   );

这个函数的作用是设置驱动信息块中的信息。对于我们最重要的是其中的硬件ID。这通过给第三个参数以SPDRP_HARDWAREID这个值就可以实现。这时候,第四个参数就是指向硬件ID字符串的指针,第五个参数就是字符串的字节长度。

WINSETUPAPI BOOL WINAPI
SetupDiCallClassInstaller(
  IN DI_FUNCTION  InstallFunction,
  IN HDEVINFO  DeviceInfoSet,
  IN PSP_DEVINFO_DATA  DeviceInfoData   OPTIONAL
  );

这个函数第一个参数要用DIF_REGISTERDEVICE填充以便注册设备,第二项填写设备信息块列表,第三项则填写设备信息块。
win7系统安装时提示找不到任何设备驱动程序的四种解决方法图文教程 有位用户说在安装ghost win7系统提示“找不到任何设备驱动程序”,遇到这样问题该怎么解决?导致安装win7系统提示“找不到任何设备驱动程序”的原因有很多,大家最为关键就是找到原因,然后在根据故障原因解决问题。下面脚本之家的小编为大家总结出安装win7系统提示“找不到任何设备驱动程序”四种解决方法。   解决方法一:重插下usb口试试   造成“找不到驱动器设备驱动 阅读详情

相关推荐

向Windows 7安装镜像添加设备驱动程序

众所周知,Windows 7采用镜像安装方式。使其在安装速度和可定制性等方面有所提高,Windows安装镜像文件为.wim格式。   Windows的默认安装镜像文件为install.wim,位于安装光盘中。一般只有装好Windows后才可单独安装设备驱动。事实上微软提供了一个工具,它能够对现有的镜像中的某些内容进行直接编辑,而无需安装完成后对Windows设置再重新抓取镜像。这也被称为“

吴思齐的技术博客 4917

驱动安装小试

因为公司要做一个驱动程序安装程序,因为那个视频卡驱动在某个时候会丢失,这个时候要求重新安装,所以也就出现了这样的一个要求 ,后来在网上找答案,发现这个问题在很多网络上都有提问,有点是好几年前提的,我不知道他们有没有解决这个问题,至少我没有从他们中找到一个很完整的答案。像驱动开发网上,提问的人也很多,回答的不少。在网上我还是收集到了对我写这个程序有益处的东西,一个是MgrSrc[Written

海纳百川 3033

HMI设备驱动程序安装实际操作指南

详细介绍HMI设备的驱动程序安装步骤与常见问题处理,帮助用户快速完成驱动程序安装并实现设备正常通信,提升调试效率。

weixin_35757191的博客 1134

UpdateDriverForPlugAndPlayDevices在64位操作系统执行失败解决方案

本文提供了驱动安装函数UpdateDriverForPlugAndPlayDevices在64位操作系统中执行失败的一种解决方案。

大道至简,知易行难 9868

代码实现利用inf文件安装硬件驱动

代码参考了网上资料并进行了整理: #include "stdafx.h" #include // Make all functions UNICODE safe. #include // for the API UpdateDriverForPlugAndPlayDevices(). #include // for SetupDiXxx functions. #include "Dir

错位竞争,单点突破。 5533

自动安装卸载驱动程序的源码

呵呵,我本来希望我是往硬件底层驱动程序发展的,本来专业就是电路方面的,这两年也做过usb驱动的一些东西,虽然能用,但是心里一直感觉不舒服,对wdm的掌握总感觉有点飘忽,所以假期中在看unix的操作系统实现,现在心里有点底了,可是没有真的写过彻底的驱动程序,总有点心虚,呵呵,贴个帖子,以前bbs上的,自己也写过,也不知道到哪里了,所以直接把人家的贴上来好了,#include "stdafx.h"

Kay's Blog 4081

两个USB设备的驱动程序混乱记

这是一个很有趣但让人恼火的事。       以前用了一个USB接口的短信收发模块,当时装好了驱动程序,使用也正常。 可是今天插上了一个USB串口模块, 也被识别成了短信收发模块, 即直接用了短信收发模块的驱动程序,结果不好用,无法进行正常通信。 后来反安装驱动程序,重启电脑,重新装USB串口模块的驱动程序,结果好用了。          究其原因,猜想可能是这2个设备的驱动程序是由一家

小桥加加的IT博客 1159

万能PCI驱动:通用硬件支持解决方案

PCI(Peripheral Component Interconnect)是一种总线标准,它定义了计算机中外围设备如何与主板芯片组和CPU通信。一个PCI设备主要通过PCI总线与主系统交换数据,其中,PCI控制器(桥)负责管理所有的PCI总线操作,实现数据的高效传输。每个PCI设备都具有唯一的设备ID和供应商ID,操作系统通过这些ID识别设备,并加载正确的驱动程序以实现控制和数据交换。

weixin_33072399的博客 1639

【操作系统】实验九 写一个设备驱动程序

学习编写设备驱动程序的一般过程

进一步有一步的欢喜 1751

电脑未能成功安装设备驱动程序怎么办,解决方法

综上所述,解决电脑未能成功安装设备驱动程序的问题需要从多个方面入手,包括检查硬件连接、使用专业软件、手动下载并安装驱动程序、检查系统环境、以管理员身份运行安装程序、使用系统还原功能以及联系制造商等。希望这些方法能帮助您解决问题。如果经过以上步骤仍然无法解决问题,可能是设备本身存在故障。在这种情况下,可以联系设备制造商进行维修或更换。

2501_90210797的博客 3524

如何安装一个设备驱动程序

2010-05-28 09:41:34|  分类: Windows内核|举报|字号 订阅 http://wanderwarriorhsiao.blog.hexun.com/19289171_d.html 本质上,安装驱动需要依靠UpdateDriverForPlugAndPlayDevices这个函数。它需要的参数其实不多,主要是INF文件路径等。

Rodney443220的专栏 1125

如何在Linux上安装设备驱动程序

    学习 Linux 设备驱动如何工作,并知道如何使用它们。 对于一个熟悉 Windows 或者 MacOS 的人,想要切换到 Linux,它们都会面临一个艰巨的问题就是怎么安装和配置设备驱动。这是可以理解的,因为 Windows 和 MacOS 都有一套机制把这个过程做得非常的友好。比如说,当你插入一个新的硬件设备, Windows 能够自动检测并会弹出一个窗口询问你是否要继续驱动程序...

OTPUB_IT的博客 7072

电脑未能成功安装设备驱动程序怎么办 几种有效修复方法

如果以上方法都无法解决问题,可以尝试使用“系统还原”功能,将计算机恢复到以前的状态,此时驱动程序功能正常。但请注意,使用该方法会丢失最近的更改和文件,因此最好先备份重要的数据。如果设备在所有电脑上都无法被识别,可能是设备本身存在问题。此时,建议联系设备制造商或售后服务中心进行维修或更换。

2501_90210797的博客 7019

如何在 Linux 上安装设备驱动程序

学习 Linux 设备驱动如何工作,并知道如何使用它们。 对于一个熟悉 Windows 或者 MacOS 的人,想要切换到 Linux,它们都会面临一个艰巨的问题就是怎么安装和配置设备驱动。这是可以理解的,因为 Windows 和 MacOS 都有一套机制把这个过程做得非常的友好。比如说,当你插入一个新的硬件设备, Windows 能够自动检测并会弹出一个窗口询问你是否要继续驱动程序安装。你也可以从网络上下载驱动程序,仅仅需要双击解压或者是通过设备管理器导入驱动程序即可。 而这在 Linux 操作系..

yimenglin的博客 3283

linux 驱动程序安装,如何在Linux上安装设备驱动程序

了解Linux设备驱动程序如何工作以及如何使用它们.对于想要切换到Linux的熟悉Windows或MacOS的人,他们将面临如何安装和配置设备驱动程序的难题. 这是可以理解的,因为Windows和MacOS都有使该过程非常友好的机制. 例如,当您插入新的硬件设备时,Windows会自动检测并弹出一个窗口,询问您是否要继续安装驱动程序. 您也可以从Internet下载驱动程序,只需双击以通过设备管理...

weixin_42376118的博客 1911

Linux 设备驱动程序示例代码安装配置指南

Linux 设备驱动程序示例代码安装配置指南 1. 项目基础介绍 本项目是基于《Linux 设备驱动程序》第三版的源代码示例,经过修改后可以在 Linux 3.x 及以上版本内核中使用。该项目旨在帮助开发者理解和学习如何在现代 Linux 内核上编写设备驱动程序。项目主要使用的编程语言是 C 语言。 2. 项目使用的关键技术和框架 本项目主要涉及以下技术和框架: Linux 内核模块开发:示例代...

gitblog_00461的博客 942

NT DDK的安装以及设备驱动程序的编译

作者:程序员客栈提交者:eastvc 发布日期:2003-10-19 20:01:54原文出处:http://www.driverdevelop.com/经常有人问及如何安装DDK,如何编译第一个设备驱动程序以及如何消除掉编译驱动程序 时出现的大量错误信息.  其实, DDK的安装和驱动程序的编译是很简单的. 为了编译驱动程 序, 你必须首先打开一个DOS窗口, 并正确设置好所需的全部环境变量

2282
上一篇: 欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 最新版本:20090608
下一篇: 通过SetupAPI扫描/禁用/恢复设备(转)
ShenRui
博客等级 码龄19年 63粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值