Window Driver 安装

本文详细介绍了Windows驱动程序的安装流程,特别是针对复杂设备的多接口安装问题。重点讲解了如何通过设置GUID来区分不同类型的设备,并通过编写co-installer来解决驱动认证问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://huapingjiang.blogcn.com/diary,9089662.shtml

Window Driver 安装 
 

                                                 Windows driver安装

关于setup class

Windows driver的安装是比较复杂的,需要写很多注册表的参数。有些参数是在inf文件里设定,有些是Windows安装程序默认帮你写到注册表里面的。卸载的时候同样也必须卸载掉注册表中driver相关信息。

Inf文件里面一个非常重要的GUID是安装类GUIID(setup class GUID)。它跟driver中定义的GUID,称为接口GUIDInterface GUID)。Interface GUIDdriver提供给application,使得application可以跟driver通信。而Setup class GUID是表示设备所属的类的,比如你的设备是USB设备类的,或者modem类的。例如我写了一个modem driver,在它的inf文件里我要指定它的setup class GUID4D36E96D-E325-11CE-BFC1-08002BE10318,这样modem driver安装以后就会在HLM/SYSTEM/CurrentControlSet/Control/Class/4D36E96D-E325-11CE-BFC1-08002BE10318下面看到modem driver的一个子建,里面记录虚拟的COM口,moden的初始化命令,inf文件的path等等信息。有些时候卸载不完全,这里就会有残留的记录。多次安装过驱动程序,或者安装过很多版本的的驱动,有些时候新版本的驱动就安装不上了。这时就需要去这里看看有没有残留。

我就有一次遇到了问题,设备插上去之后发现安装不上,设备管理器里面就是没有响应(因为我做了class coinstall,所以不会弹出发现新硬件的对话框),发现里面有很多版本的驱动的残留,我清除了这些之后,驱动就可以安装了。

 

关于Co-installer

co-installer的认识是从一个老外那里开始的,他是一个senior engineer。当时我们的设备是一个多接口的USB设备,所以会出现多个新设备的安装。为了简化安装过程,需要写一个coinstaller,原来我们打算安装DDK里面关于co-installer的说明来写的。后来证明不能那样做。我们就写了一个application来把所有需要的sys文件和inf文件复制到system目录下,inf文件还做了转化。因为Windows如果在注册表中找不到驱动信息,先回去system目录下搜索驱动的pnf文件(inf文件的二进制表示)。

这样我们的application就起作用了,安装起来就比较方便。Application执行完之后只要插上设备就可以了,但是由于我们的driver没过WHQL认证,所以在WINDOW 2K下面OK,而在WINDOWS XP下面不行。

由于Windows XP在发现没有认证过的驱动之后,在弹出“发现新硬件”之前,会依次调用class co-installerdevice co-installer,而且会把SP_DRVINFO_DATA结构里面的Rank值指定为非0(通过认证它的值是0),后来我们就写了一个class co-installer来修改Rank的值为0。相关处理代码如下:

  case DIF_SELECTBESTCOMPATDRV:

        DbgOut("DIF_SELECTBESTCOMPATDRV");

        if (DeviceInfoData)

        {

            SP_DRVINFO_DATA sDrvInfoData;

            DWORD MemberIndex = 0;

            BOOL bRet = FALSE;

            memset((void*)&sDrvInfoData, 0,  sizeof(SP_DRVINFO_DATA));

            sDrvInfoData.cbSize =  sizeof(SP_DRVINFO_DATA);

            bRet = SetupDiEnumDriverInfo(DeviceInfoSet, DeviceInfoData, SPDIT_COMPATDRIVER, MemberIndex++, &sDrvInfoData);

            if (bRet)

            {

                SP_DRVINSTALL_PARAMS sDrvInstallParams;

                memset((void*)&sDrvInstallParams, 0,  sizeof(SP_DRVINSTALL_PARAMS));

                sDrvInstallParams.cbSize =  sizeof(SP_DRVINSTALL_PARAMS);

                OutputDebugString(sDrvInfoData.Description);

                SetupDiGetDriverInstallParams(DeviceInfoSet, DeviceInfoData, &sDrvInfoData, &sDrvInstallParams);

                sDrvInstallParams.Rank = 0;

                SetupDiSetDriverInstallParams(DeviceInfoSet, DeviceInfoData, &sDrvInfoData, &sDrvInstallParams);

            }

        }

        else

        {DbgOut("DeviceInfoData is null!");

        }

        break;

 

<think>好的,我现在需要帮助用户在Windows系统上安装NVIDIA驱动程序。用户提到在安装过程中遇到了兼容性问题,比如驱动程序与Windows版本不兼容的报错。根据提供的引用内容,特别是引用[1]和引用[2],我需要结合这些信息来给出正确的安装步骤和解决方法。 首先,我应该先确认用户的操作系统版本是否与驱动程序兼容。引用[1]中提到用户是Windows 10专业版,但安装时出现版本不兼容的问题。这可能是因为用户下载的驱动程序不支持当前的Windows版本,或者系统更新导致版本不匹配。因此,第一步需要指导用户检查系统版本和驱动程序的系统要求。 接下来,用户可能需要从NVIDIA官方网站下载正确的驱动程序。引用[2]提到安装操作系统和NVIDIA驱动程序的步骤,这里需要强调从官网下载的重要性,避免使用第三方来源的驱动,以减少兼容性风险。同时,用户可能需要手动选择正确的产品型号和操作系统版本,比如选择正确的Windows 10版本(如21H2)和系统位数(64位或32位)。 另外,用户可能在安装过程中遇到残留驱动文件的问题,导致新驱动无法正确安装。这时候需要建议用户使用DDU工具彻底卸载旧驱动,再重新安装。引用[1]中的用户进行了全新安装仍然报错,可能系统中仍有残留文件,所以DDU的使用可能很关键。 还有,安装前的准备工作,比如关闭杀毒软件、禁用Windows自动更新驱动程序,这些步骤可以防止系统干扰安装过程。同时,安装时以管理员身份运行安装程序,确保有足够的权限。 在步骤中需要分点说明,确保用户能一步步跟随操作。最后,生成相关问题时要考虑用户可能遇到的后续问题,例如如何更新驱动、解决安装失败的其他原因,以及检查驱动是否成功安装的方法。 需要确保回答结构清晰,每一步都详细且准确,避免技术术语过多,让用户容易理解。同时,引用来源要正确标注,比如引用[1]中的兼容性问题,引用[2]中的安装步骤和官方资源。</think>### 分步解答:Windows系统安装NVIDIA驱动程序的步骤 1. **确认系统版本和驱动兼容性** - 右键点击“此电脑” → 选择“属性”,查看Windows版本(如Windows 10 21H2)和系统类型(64位/32位) - 访问[NVIDIA官方网站](https://www.nvidia.com/Download/index.aspx),手动选择显卡型号和对应的Windows版本[^1]。 - *注意:* 避免使用“自动检测工具”,部分旧版驱动可能与新系统不兼容。 2. **彻底卸载旧驱动(如存在残留)** - 下载[DDU(Display Driver Uninstaller)工具](https://www.wagnardsoft.com/) - 进入安全模式: - 按`Win+R`输入`msconfig` → 选择“引导” → 勾选“安全引导” → 重启 - 运行DDU → 选择“NVIDIA显卡驱动” → 点击“清除并重启”[^1]。 3. **安装新驱动程序** - 禁用Windows自动更新驱动: - 右键“此电脑” → “属性” → “高级系统设置” → “硬件” → “设备安装设置” → 选择“否” - 以管理员身份运行下载的驱动安装程序(如`NVIDIA-Linux-x86_64-535.104.05.run`) - 选择“自定义安装” → 勾选“执行清洁安装”以覆盖残留文件[^2]。 4. **验证安装结果** - 按`Win+X` → 打开“设备管理器” → 展开“显示适配器” → 确认显卡型号无感叹号 - 运行`NVIDIA Control Panel` → 查看“系统信息”中的驱动版本是否匹配。 ### 常见问题解决 - **报错“不兼容”**:检查驱动是否支持当前系统版本(如Windows 10 21H2需对应驱动版本号465以上) - **安装过程中断**:关闭杀毒软件(如360安全卫士),确保安装文件路径无中文字符 - **黑屏/闪屏**:尝试通过“安全模式”回滚驱动,或安装旧版稳定驱动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值