简介:面向需要在Windows 7/10的64位及32位环境中部署精锐系列加密狗与智能卡设备的用户,这份驱动安装包汇总了V4.0.0.4版本的安装程序及配套组件,可用于解决系统识别异常、驱动缺失或旧版本兼容性不足等问题,适合运维人员、软件实施者及需要复现老旧外设环境的开发者参考使用。压缩包共24个文件,涵盖dll动态库、exe安装程序、sys系统驱动、inf配置信息、cat签名文件以及lib、h和pdf说明文档等,整体约1.26MB,体积轻便但组件较完整,便于按系统架构选择对应安装入口并查阅驱动安装说明。已有8266人学习下载,说明其在同类老设备驱动需求中具有一定参考价值。包内提供多平台安装程序与驱动文件,并附智能卡系列产品驱动安装程序使用说明,读者可据此核对适用系统、完成驱动部署,并在遇到设备无法识别或安装失败时结合组件类型定位问题,减少重复查找驱动的时间。
1. 一份驱动包,两种架构,装错一次得折腾一下午
设备插上去,设备管理器里那一行黄色感叹号,比任何报错都让人烦。手里这个 elite 精锐系列驱动安装包,把 64 位和 32 位两套驱动放在同一个目录里,看着省事,实际装的时候,架构选错、签名对不上、旧版本没清干净,随便撞上一条都够在设备管理器前面坐半天。这篇文章不讲驱动模型的发展史,只讲这个包怎么拆开看、怎么判断该上哪一套、命令行怎么注入、装完之后怎么确认它真的在工作,以及我踩过的五个坑。手里有精锐系列设备、要在一个机房里把 Win7 到 Win11 连同老机器一起收拾干净的人,按下面的顺序走一遍就行。
2. 拆包先看清结构:x86 与 x64 的差异到底在哪
很多人拿到安装包的第一反应是双击setup.exe,然后一路下一步。单台机器、系统干净的情况下这么做没毛病,但一旦失败,setup.exe会带着一堆中间的安装文件闪退,程序留下的信息只剩下一句“安装失败”,连错在哪都不知道。所以我的习惯是,拿到手的第一个动作不是装,而是拆开看里面有什么。
2.1 一个标准驱动包的五部分与加载顺序
这类驱动包解开之后,目录结构基本长这样:
elite_driver/ ├── x64/ │ ├── elitebus.inf # 安装信息文件,描述“什么设备、用哪个文件、怎么装” │ ├── elitebus.sys # 内核态驱动本体 │ ├── eliteport.sys # 可选,串口/端口类子驱动 │ ├── elite.cat # 数字签名目录文件,签名覆盖上面所有文件的哈希 │ └── WdfCoInstaller.dll # 若依赖 KMDF,会带对应版本的内核框架共同安装器 ├── x86/ │ └── (与 x64 同名的另一套二进制) ├── setup.exe # 厂商封装的可执行安装器 ├── dpinst.exe # 通用驱动安装器(驱动安装框架) └── readme.txt这几个文件各自管什么,弄错了会出什么事,看这张表就够:
| 文件 | 作用 | 缺失或损坏后的表现 |
|---|---|---|
*.inf | 声明硬件 ID 匹配规则、源文件列表、服务名、驱动版本 | 设备管理器“从磁盘安装”时看不到可选项 |
*.sys | 真正跑在内核里的驱动二进制 | 设备能识别但状态码报 10 或 39 |
*.cat | 签名容器,签名的是整份文件清单的哈希 | 64 位系统直接拒绝加载,报错误代码 52 |
WdfCoInstaller*.dll | 当目标机 KMDF 版本低于驱动编译版本时补齐 | 驱动加载时蓝屏或事件日志报框架版本不匹配 |
setup.exe | 把上面几件事按顺序串起来执行 | 不影响手动安装,但会丢掉厂商预置的注册表项 |
加载顺序是这样走的:PnP 管理器枚举到新设备,拿到设备的 Hardware ID,遍历驱动库里的 INF,找到匹配的Models段,校验 CAT 签名,把 SYS 复制进C:\Windows\System32\DriverStore\FileRepository,创建对应的服务项,最后启动设备。这里面任何一步失败,你在设备管理器里看到的就都是一个黄色感叹号,区别只在状态码。
2.2 INF 里三行字段决定了它认谁
真正决定“这个包装不装得上”的,是 INF 里几个字段,而几乎所有“装完没反应”都能从它们身上找到原因:
[Manufacturer]段里的%EliteDevice%=Elite, USB\VID_xxxx&PID_xxxx,这一行是设备匹配的唯一依据。VID/PID 对不上,就算你手动指定 INF,系统也会提示“指定的文件夹不包含与你的设备兼容的软件驱动程序”。DriverVer=这一行写的是驱动版本和日期。版本号比系统里已有的低,Windows 会认为“已有更新的驱动”,直接从界面上把回滚按钮灰掉,这就是很多人“新驱动装不进去、旧驱动也退不回”的原因。CatalogFile=指定签名文件的名字。厂商二次打包时如果改了文件名却没同步这一行,签名校验必然失败。
我见过最典型的一种情况,是有人为了改默认参数,直接用文本编辑器打开 INF 把某个寄存器初始值改掉,然后保存。这样一改,elite.cat里记录的哈希就跟 INF 对不上了,64 位系统装上去直接报签名无效。想调参,正确做法是先改 INF,再用测试证书重新签名,或者干脆走驱动暴露出来的注册表参数接口;直接在包里改文件这条路,在启用强制签名的机器上是走不通的。
2.3 三分钟判断该用哪套,顺手验一遍文件完整性
判断架构这件事,被“64 位系统能跑 32 位程序”这句话带偏过太多人。应用层确实向下兼容,但内核驱动没有这回事:x64 的 Windows 只能加载 x64 驱动,哪怕这台机器上装的全是 32 位业务软件。反过来,32 位系统根本加载不了 x64 驱动,尝试安装时表现为 INF 被忽略,或者安装到一半时蓝屏。
下面这段 PowerShell 可以在目标机上一把把架构、版本、签名状态和三套关键文件的完整性都确认掉:
# 在目标机器上以管理员身份运行;只读操作,不改任何配置 $pkg = "D:\driver\elite_driver" # 1) 系统架构与版本:这三项决定了该走 x64 还是 x86 目录 [pscustomobject]@{ Is64BitOS = [Environment]::Is64BitOperatingSystem # True 就必须用 x64 那套 Caption = (Get-CimInstance Win32_OperatingSystem).Caption Build = (Get-CimInstance Win32_OperatingSystem).BuildNumber SecureBoot = try { (Confirm-SecureBootUEFI).ToString() } catch { "N/A(非 UEFI 或旧系统)" } } | Format-List # 2) 逐套核对文件是否齐全,别等装的时候才发现 x86 目录是空的 foreach ($arch in "x64","x86") { $dir = Join-Path $pkg $arch if (-not (Test-Path $dir)) { Write-Warning "$arch 目录不存在"; continue } $files = Get-ChildItem $dir -Include *.inf,*.sys,*.cat -File "{0,-5} 文件数 {1} 总大小 {2:N0} 字节" -f $arch, $files.Count, ($files | Measure-Object Length -Sum).Sum } # 3) 校验签名:Status 必须是 Valid,Signer 要是设备厂商而不是“未知” Get-ChildItem (Join-Path $pkg "x64") -Filter *.sys -File | ForEach-Object { $sig = Get-AuthenticodeSignature $_.FullName [pscustomobject]@{ File = $_.Name Status = $sig.Status Signer = if ($sig.SignerCertificate) { $sig.SignerCertificate.Subject } else { "无签名" } } } | Format-Table -AutoSize这段脚本重点看三个输出。Is64BitOS为True时,后面所有安装动作都只指向x64目录,x86那套可以完全不用碰。文件数和总大小用来快速发现包在金标压缩、网盘传输过程中解压不完整的情况。签名部分,Status出现NotSigned或者HashMismatch,就先别往下走了,说明文件被动过或者下载残缺,此时最省时间的做法是重新取一份包,不要试图靠关闭签名强制“绕过”。
CAT 文件的签名校验用系统自带工具更直接,有签名工具套件的话:
# signtool 随 Windows SDK 安装;/kp 表示按内核策略校验,/v 输出证书链细节 signtool verify /kp /v "D:\driver\elite_driver\x64\elite.cat"输出里如果出现SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted,问题出在证书链,不是包坏了。老版本的交叉签名根证书在新系统上可能已经不在受信任列表里,这时候升级驱动版本才是正解,在客户端上手工导入根证书属于把风险留给自己。
3. 安装前的三项状态确认:架构、签名策略、旧驱动残留
直接双击安装失败,八成是因为装之前没看清机器现在是什么状态:系统里可能已经躺着同一个设备的老版本驱动,可能开了 Secure Boot,也可能上一次安装中断时留下了一个处于“待删除”状态的设备实例。这三件事,装之前各花一分钟确认,能省掉后面一小时的排错。
3.1 架构与系统版本的一次性采集
架构判断在 2.3 已经覆盖,这里补一个容易漏掉的点:系统版本决定了能用哪一档驱动。Win7 时代的包通常同时提供 WDM 和 KMDF 两个版本,Win10 之后基本只保留 KMDF;反过来,如果这个精锐系列包里带的 KMDF 版本是 1.13,而目标机是没打过补丁的 Win7 SP1,系统自带的内核框架版本可能只有 1.9,驱动加载时会直接报 39 或蓝屏。采集命令:
# 查系统里 KMDF 运行库的版本,低于驱动要求的就先装 WdfCoInstaller 再上驱动 Get-Item "C:\Windows\System32\drivers\Wdf01000.sys" | Select-Object @{n='KMDF版本';e={$_.VersionInfo.FileVersion}}, LastWriteTime输出里FileVersion那一段(形如1.15.0.0)就是这个系统当前的 KMDF 版本。对比包里WdfCoInstaller*.dll文件名中的版本号,包里的更低,就可以正常安装;包里的更高,先跑一遍包里附带的共同安装器,再安装设备驱动,顺序反了就可能白装一遍。
3.2 签名强制策略:别为了省事在生产机上动它
64 位 Windows 从 Vista 起就对内核驱动强制签名,这个开关在正常系统里没有“永久关掉”的选项,能改的只有“测试签名”这个临时状态。开启方式:
# 仅限隔离的内网测试机!开启后桌面右下角会常驻水印,且降低系统安全性 bcdedit /set testsigning on # 重启后生效,验证当前状态 bcdedit /enum {current} | findstr /i testsigning这条命令我要把话说重一点:它的用途只有一个,就是验证“自己重新签名的驱动能不能正常工作”。生产机、办公机、任何会接触到外部网络的机器都不该开这个开关。测试签名模式会接受任何自签名证书签的驱动,等于把内核加载校验的门彻底打开了。同样的道理,一次性启动菜单里的“禁用驱动程序强制签名”只用来看一眼错误码是不是 52,验证完立刻重启回正常模式。
真正需要长期使用的驱动,只有两条路:用厂商的正规签名包,或者在内网自建证书颁发体系,把根证书通过组策略下发到域内所有机器,再用它给驱动签名。后一条路在几十台以上的规模里是值得做的,前期配一次,后面所有版本的驱动都能复用。
3.3 旧驱动残留:按“设备 → 驱动包”的顺序清
设备管理器里删掉设备,并不等于把驱动从 DriverStore 里删掉了。新版本的 INF 匹配到设备时,如果发现驱动库里已经有一个同名服务、版本号还更高的旧包,会直接跳过安装,表现就是“装完了,设备还是黄叹号,版本号没变”。
正确的清理顺序是先设备、后驱动包:
# 1) 先列出所有与精锐系列相关的驱动包,记下“发布名称”(oemXX.inf 形式) pnputil /enum-drivers # 2) 列出当前存在的设备实例,确认哪个是目标设备 pnputil /enum-devices /connected /class USB # 3) 卸载设备(/deviceid 用上一步查到的实例 ID) pnputil /remove-device "USB\VID_xxxx&PID_xxxx\5&1a2b3c4d&0&1" # 4) 再删除驱动包,/uninstall 会连带尝试卸载正在使用它的设备 pnputil /delete-driver oem42.inf /uninstall /force/enum-drivers的输出里,发布名称是oem42.inf这种系统内部编号,跟厂商原始文件名无关,这也是很多人翻遍System32\drivers也找不到对应文件的原因——真实文件在DriverStore\FileRepository下面,按哈希目录存放。删之前把编号抄下来,后面回滚还要用。/force参数会强制删除正在被设备占用的驱动包,用完之后设备会掉到“其他设备”下面,需要重新扫描硬件变更让它重新匹配。
4. 三条安装路径:界面、命令行、批量脚本
同一个包,装一台和装五十台是两套做法。单台机器用图形界面最快,出错时也能直接看到提示;命令行适合远程和无人值守;批量脚本则要把返回码、架构判断、日志收集全部包进去,否则五十台里出问题的那几台,排查成本比手工装还高。
4.1 路径一:设备管理器从磁盘安装
这是最原始也最可控的一条路,适合第一次接触这个包、想看清楚每一步在干什么的场景。
步骤:设备管理器里找到带黄色感叹号的设备 → 右键“更新驱动程序” → “浏览我的电脑以查找驱动程序” → “让我从计算机上的可用驱动程序列表中选取” → “从磁盘安装” → 指向x64\elitebus.inf→ 确认设备列表里出现预期型号 → 下一步。
有几个细节值得留意。第一,指向目录和指向 INF 文件是两回事,指向目录时系统会自动挑选匹配当前架构的那一份,指向单个 INF 时如果挑错了架构,会直接提示“指定的 INF 不包含此设备的兼容驱动”。第二,“让我从计算机上的可用驱动程序列表中选取”这一步不能省,直接走“浏览”那一栏,系统可能优先从 Windows 更新里拉一个通用驱动顶上去,装上之后设备能用,但功能不全,端口映射之类的特性都没了。第三,装完立刻看一眼设备属性里的“驱动程序”页,确认版本号和提供商,别只看黄叹号消失就以为成了。
4.2 路径二:pnputil 注入与核对
命令行安装的好处是每一步都有明确的返回码,失败时能第一时间定位。整个流程分注入和绑定两步:
# 注入:把 INF 及其引用的文件复制进 DriverStore,/install 表示立即尝试匹配现有设备 pnputil /add-driver "D:\driver\elite_driver\x64\elitebus.inf" /install # 如果设备是后插的,注入完成后触发一次硬件重扫 pnputil /scan-devices # 核对:确认包已经进了驱动库,并记下发布名称,方便回滚 pnputil /enum-drivers | findstr /i /c:"elite" /c:"oem"/add-driver成功时返回0,输出里会有一行“已成功添加驱动程序包”,并显示生成的oemXX.inf编号。返回0xE0000247(ERROR_INVALID_INF)通常是 INF 语法错误或者被编辑器改过编码;返回0xE000024B(ERROR_DRIVER_BLOCKED)则是签名或者兼容性策略拦截,这时候去看C:\Windows\INF\setupapi.dev.log的尾部,具体原因都写在里面。
一个容易被忽略的点:/install只对当前已经存在的设备生效。设备还没插上就执行这条命令,包会进驱动库但不会绑定,等设备插上时系统能不能自动匹配上,取决于 INF 里的 Hardware ID 写得够不够宽。所以稳妥的做法是注入之后把设备插上,再执行一次/scan-devices,最后用/enum-devices确认设备状态是Started。
4.3 路径三:批量脚本与返回码处理
几十台机器的时候,手工点不现实,但脚本也不能写得太“乐观”——只发一条 pnputil 就结束的脚本,失败时你连哪台出错都不知道。下面这个写法的思路是:先判断架构、再校验文件、再注入、再核对状态,任何一步失败都留下可追溯的信息。
# 用法:.\Install-EliteDriver.ps1 -PackageRoot "\\fileserver\drv\elite_driver" param( [Parameter(Mandatory=$true)][string]$PackageRoot, [string]$InfName = "elitebus.inf", [string]$LogDir = "C:\Temp\elite_driver_log" ) $ErrorActionPreference = "Stop" New-Item -ItemType Directory -Path $LogDir -Force | Out-Null $log = Join-Path $LogDir ("install_{0:yyyyMMdd_HHmmss}.log" -f (Get-Date)) function Write-Log($msg) { $line = "[{0:HH:mm:ss}] {1}" -f (Get-Date), $msg $line | Tee-Object -FilePath $log -Append } try { # 1) 架构判断:64 位系统只能上 x64,没有例外 $arch = if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" } $inf = Join-Path $PackageRoot "$arch\$InfName" Write-Log "目标架构 $arch,INF 路径 $inf" if (-not (Test-Path $inf)) { throw "INF 不存在,检查包是否完整" } # 2) 注入前先看有没有同名旧包,有就记下来,但不在这一步删 $old = pnputil /enum-drivers | Select-String -Pattern "elite" -SimpleMatch if ($old) { Write-Log ("发现已有驱动包:" + ($old -join " | ")) } # 3) 注入并捕获输出与返回码 $out = & pnputil /add-driver $inf /install 2>&1 $code = $LASTEXITCODE Write-Log ("pnputil 返回码 0x{0:X},输出:{1}" -f $code, ($out -join " ").Trim()) if ($code -ne 0) { throw "驱动注入失败,返回码 0x$('{0:X}' -f $code)" } # 4) 触发重扫并核对设备状态,Started 才算真的装上了 pnputil /scan-devices | Out-Null Start-Sleep -Seconds 3 $dev = pnputil /enum-devices /connected | Select-String -Pattern "elite" -Context 0,4 Write-Log ("设备状态:`n" + ($dev -join "`n")) Write-Log "安装流程结束" } catch { Write-Log ("错误:" + $_.Exception.Message) Write-Log "请检查 C:\Windows\INF\setupapi.dev.log 末尾 200 行" exit 1 }脚本里几个参数值得按实际环境调整。$InfName默认取主 INF,如果这个包拆成了总线驱动和端口驱动两个 INF,脚本需要循环调用两遍,且总线驱动必须先装,否则后者的设备实例根本不会出现。Start-Sleep -Seconds 3是给 PnP 管理器留的枚举时间,在机械盘的老机器上可能需要拉到 8 到 10 秒,否则枚举到的还是安装前的状态,白白误判成失败。日志按时间戳分文件,而不是追加到同一个文件,是为了让每台机器的排查互不干扰——这一点在出问题之后就会体会到它的好处。
5. 五个翻车现场:现象、原因、解决
下面这五条都是我在不同批次的机器上真实遇到过的,按出现频率从高到低排。
5.1 报“Windows 无法验证此设备所需的驱动程序的数字签名”(代码 52)
现象:设备管理器里设备带黄色感叹号,属性里状态是“该设备的驱动程序未被安装”,事件里写明签名验证失败,错误代码 52。在 32 位系统上同样的包能装上,换到 64 位就不行。
原因:Windows 对内核模式驱动的签名要求,在 32 位和 64 位系统上从来就不是一个标准。64 位系统不仅要求驱动有签名,还要求证书链能追溯到受信任的根,且签名必须覆盖 CAT 里列出的全部文件。包里任何一个文件被替换、被压缩工具改写过时间戳之外的字节,哈希就会对不上。
解决:先用 2.3 那段脚本确认Status到底是NotSigned还是HashMismatch。前者说明这个包本身就是未签名版本,只能换正规签名包;后者说明文件被改动过,重新取一份原始包即可。千万不要用“开机按 F7 禁用签名强制”这种方式把它装上去——那样装上的驱动每次重启都会失效,设备会时好时坏,比装不上更难排查。
5.2 pnputil 返回成功,设备管理器里还是黄叹号
现象:/add-driver明确返回 0,/enum-drivers里也能看到刚注入的包,但设备状态一直停在“正在启动”或者干脆还是感叹号,重启也不管用。
原因:驱动包进了驱动库,不等于绑定到了设备上。最常见的是 INF 里的 Hardware ID 和设备上报的 ID 只在部分字段上匹配,系统选了另一个优先级更高的通用驱动;其次是同一个设备实例上已经绑定了旧驱动,新包没有机会接管。
解决:先在设备属性 →“详细信息”里看“硬件 ID”,跟 INF 的[Manufacturer]段逐字符比对,特别注意大小写之外的差异,比如VID_1A2B和VID_1a2b在字符串匹配时是两回事。ID 一致的话,用pnputil /remove-device卸掉设备实例再重扫,让它重新走一遍匹配流程。还不行就去看setupapi.dev.log,搜Device Install那几段,里面会明确写出“选择的驱动”和“备选驱动”分别是哪个,为什么不匹配。
5.3 32 位小主机上装完直接蓝屏或设备完全不识别
现象:一批老旧的 32 位工控机上,按常规流程装完重启就蓝屏,错误代码0x0000007E或者0x000000D1;有的机器不蓝屏,但设备管理器里彻底看不到设备。
原因:十有八九是 x64 的包被装到了 32 位系统上。setup.exe这类封装安装器有时不判断架构,直接把x64目录里的文件复制过去,系统在启动阶段加载一个架构不符的 SYS 文件,结果就是蓝屏。另一种可能是包里的 KMDF 版本高于这台老机器系统自带的版本。
解决:先确认架构,再谈安装。32 位机器一律只碰x86目录,且不要用setup.exe一把梭,改成手动指定 INF。已经蓝屏的机器进安全模式,用pnputil /delete-driver oemXX.inf /uninstall /force把装错的包清掉,再按正确架构重装。KMDF 版本问题就按 3.1 的方法先补共同安装器。
5.4 新版驱动装不上,回滚按钮还是灰的
现象:想从旧版升级到新版,结果设备管理器提示“已安装最适合的驱动程序”,从磁盘指定新 INF 也没用,属性里“回退驱动程序”那一栏是灰色的,点不动。
原因:INF 里的DriverVer版本号没有比系统里现有的高,Windows 认为当前驱动已经是最新的,直接拒绝替换。灰色回滚按钮则是因为这个设备从来没有过一次成功的驱动更新记录,系统里没有可回退的目标。
解决:先/enum-drivers找到旧包的oemXX.inf,/delete-driver oemXX.inf /uninstall /force删掉,再重新扫描硬件、注入新包。如果新包版本号确实比旧包低(厂商分支维护的情况很常见),就不要硬来,先在测试机上验证新版是否真的必需,很多时候“升级”只是版本号大了,功能上并没有差别。
5.5 设备插上去毫无反应,连未知设备都不出现
现象:设备插上之后设备管理器纹丝不动,连“其他设备”下面都没有新增条目,换台机器就正常。
原因:这种情况已经不是驱动的问题了,问题在物理层或者系统层的设备枚举。可能的原因有:USB 端口供电不足,尤其是没有外接电源的集线器;系统的 USB 选择性暂停策略把空闲端口挂起了;设备本身处于异常状态,需要重新上电才能重新枚举。
解决:先换一个直接焊在主板上的端口,别用前置面板和集线器;再到电源选项里把“USB 设置 → USB 选择性暂停设置”改成已禁用,然后设备管理器里“扫描检测硬件改动”。还不行就去看系统事件日志的 System 分类,筛选来源为USBHUB3或Kernel-PnP的条目,硬件层面的枚举失败会在这里留下明确记录,比在驱动层面瞎猜快得多。
6. 装完不算完:三条验证动作和一个回滚习惯
设备管理器里黄叹号消失,只是说明了“驱动被系统接受了”,不代表“驱动在正常工作”。我在一批机器上就吃过这个亏:五十台全部显示正常,结果其中三台的端口映射根本没生效,业务侧报上来才发现,回头一台台查日志,时间全浪费在返工上。从那以后,每次批量装完,我都会强制走一遍验证。
第一条,看状态码。设备属性 →“常规”里如果写的是“这个设备运转正常”,还不够,要到“详细信息”里选“问题代码”,值必须是0。非零值里,10是设备无法启动,28是驱动未安装,31是驱动加载失败,39是驱动损坏或框架版本不匹配。这几个码基本能覆盖八成问题。
第二条,看setupapi.dev.log。这个文件是驱动安装过程的完整黑匣子,位置在C:\Windows\INF\setupapi.dev.log。搜设备实例 ID,往下翻,重点看>>> [Device Install]到<<< [Exit status: SUCCESS]之间那几十行,里面记录了选中的 INF 路径、签名校验结果、复制的每个文件、创建的服务名。安装失败时,最后几行的!!!标记就是根因。
# 只看最近一次安装的记录,避免在几万行日志里翻 Get-Content "C:\Windows\INF\setupapi.dev.log" -Tail 300 | Select-String -Pattern "elite|!!!|Exit status" -Context 0,2第三条,做一次实际的功能验证。端口类设备就发一帧数据看回显,采集类设备就读一次样本看数值是否在合理范围。这一步没法用命令替代,但恰恰是最容易被跳过的一步。
至于回滚,我的习惯是装之前先记下/enum-drivers里的oemXX.inf编号和版本号,写进部署记录里。出了问题,pnputil /delete-driver oemXX.inf /uninstall /force清掉新包,把旧包重新注入,整个过程五分钟以内。驱动这东西,能回得去比装得上更重要——毕竟装上只是一次性的动作,回滚是随时可能用得上的后悔药。希望这些能帮到你,少在设备管理器前面坐几个下午。
本文还有配套的精品资源,点击获取