全文基于真实排查过程整理,所有命令均可直接复用。
Windows 安全中心 → 设备安全性 → 内核隔离 → **内存完整性**:开关是灰的、关着的,系统提示「存在不兼容的驱动程序」。
点开「查看不兼容的驱动程序」,列出 7 个 .sys 文件:
ew_usbccgpfilter.sys
hw_cdcacm.sys
hw_quusbmdm.sys
hw_usbdev.sys
USBDrv.sys
PassGuard_x64.sys内存完整性(HVCI,基于虚拟化的代码完整性保护)是 Windows 里防护等级很高的一项安全能力,它会拒绝加载任何试图直接改动内核的驱动。**只要有一个不兼容驱动在,开关就打不开。**
这篇文章记录的是:如何用 WorkBuddy 从「一串文件名」一路查到「每个驱动的身世」,再安全地清理掉它们。


**千万别只看文件名就下结论。** 这是本次排查最大的教训,后面会详说。
| 步骤 | 手段 | 可信度 |
| -- | -------------------------------------------- | ------- |
| 1 | 看 .sys 文件名猜归属 | ❌ 只能当线索 |
| 2 | 读 INF 的 Provider / Class 字段 | ✅ 确定厂商 |
| 3 | 从 .sys 二进制里提取 CompanyName 和 **PDB 调试路径** | ✅✅ 铁证 |
| 4 | 查注册表卸载项 / 服务项,确认软件真名 | ✅✅ 最终确认 |
第 3 步是这次能破案的关键。驱动编译时会在二进制里留下 PDB 符号文件路径,那个路径常常直接暴露开发者的工程目录名——比任何文件名都准。
Windows 把第三方驱动包安装成 C:\Windows\INF\oemNN.inf。
cd /c/Windows/INF
for f in oem\*.inf; do
if grep -aqiE "huawei|hw\_|ew\_|usbdrv|sdt|passguard" "$f" 2>/dev/null; then
echo "--- $(basename $f)"
grep -aiE "^\s\*(Provider|Class|DriverVer)\s\*=" "$f" | head -3 | tr -d '\r'
fi
done这一步的价值是**拿到 oem 编号**,后续 pnputil /delete-driver 就靠它。
注意:这里扫出来的数量往往比 Windows 安全中心列出的**更多**。安全中心只列它判定为不兼容的,实际同族驱动可能有好几份。
grep -aiE "ProviderName|Class=|DriverVer" /c/Windows/INF/oem89.inf | head -5华为那几个都返回 Provider = Huawei Technologies Co., Ltd.,版本 2012–2016 年。
.sys 归属(关键一招)Windows 的 Get-Item.VersionInfo 在某些环境下读不出驱动文件的版本信息,直接解析二进制更可靠:
import re
path = r"C:\Windows\System32\drivers\PassGuard\_x64.sys"
data = open(path, 'rb').read()
res = []
# UTF-16LE 字符串(Windows 资源段的常见编码)
for m in re.finditer(rb'(?:[\x20-\x7E]\x00){4,}', data):
res.append(('U16', m.group().decode('utf-16-le')))
# ASCII 字符串
for m in re.finditer(rb'[\x20-\x7E]{5,}', data):
res.append(('A', m.group().decode('ascii')))
keys = ['Company','FileDescription','Product','Copyright','Internal',
'Original','Version','.pdb','Guard','Bank','Key']
seen = set()
for tag, s in res:
for k in keys:
if k.lower() in s.lower() and len(s) < 120 and s not in seen:
seen.add(s)
print(f"[{tag}] {s}")PassGuard\_x64.sys 的输出里有这么一行:
[A] C:\workdriver\workspace\PassGuard\_driver\...\SysEnterHook.pdb
从驱动二进制里提取的字符串:PDB 路径直接暴露了工程名 **SysEnterHook**——一个 2011 年的系统调用钩子驱动,这是内存完整性的典型“一级通缉犯”。
reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" \
/s /f "PBCCRC" | grep -iE "DisplayName|Publisher|UninstallString"我在排查中看到 PBCCRC 和目录 C:\Windows\SysWOW64\PBCCRCNew\,第一反应是「**农行网银**」——因为 ABC 才是农行,PBCCRC 看着也像某个银行缩写。
**错了。** 查卸载项名称才看到真身:
DisplayName: 人行征信中心密码控件非插件版PBCCRC = People's Bank of China Credit Reference Center —— **中国人民银行征信中心**,不是农业银行。这个控件用于登录 ipcrs.pbccrc.org.cn 查个人信用报告时的密码安全输入。
**如果只凭文件名和目录名猜,就可能给用户一个错误的卸载建议。** 卸载后果完全不同:一个是网银,一个是查征信。
这条原则值得写进任何排查流程:**文件名只是线索,卸载项名称 / PDB 路径才是证据。**
删驱动前必须确认「没有设备在用」。
cd /c/Windows/System32
./pnputil.exe /enum-devices /instanceid "USB\VID\_12D1&PID\_107E\9FK5T19525006989"华为 VID 是 12D1。这次查到的状态是**已断开连接**(幽灵条目/Phantom),且当前系统里没有任何华为 USB 设备在线 —— 清理是安全的。
./pnputil.exe /remove-device "USB\VID\_12D1&PID\_107E\9FK5T19525006989"这个设备的 UpperFilters 正挂在 ew\_usbccgpfilter 上,不先摘掉设备,驱动包删不掉。
密码控件目录里有 uninst.exe,先确认它是什么安装器打的包:
python -c "
d=open(r'C:\Windows\SysWOW64\PBCCRCNew\uninst.exe','rb').read()
for p in [b'Nullsoft',b'NSIS',b'Inno Setup',b'/VERYSILENT']:
print(p, b'YES' if p in d else 'no')
"确认是 **NSIS**,于是用静默参数走官方卸载流程,而不是手撕文件:
"C:\Windows\SysWOW64\PBCCRCNew\uninst.exe" /S卸载后:服务 PBCCRCPassGuardXInputService 完全移除;内核服务 PassGuard 被标记 DeleteFlag=1(重启后消失);PassGuard\_x64.sys 因被占用需要重启后删。
pnputil /delete-driver oem89.inf /uninstall /force
pnputil /delete-driver oem90.inf /uninstall /force
pnputil /delete-driver oem91.inf /uninstall /force
pnputil /delete-driver oem63.inf /uninstall /force
pnputil /delete-driver oem29.inf /uninstall /force
pnputil /delete-driver oem1.inf /uninstall /force
pnputil /delete-driver oem49.inf /uninstall /force有些目录只躺在 C:\Windows\System32\DriverStore\FileRepository\ 里、没有对应 oem INF,受 TrustedInstaller 保护,普通删除无效:
takeown /F "C:\Windows\System32\DriverStore\FileRepository\usbdrvco.inf_amd64\_87cd3882f8de0a03" /R /A /D Y
icacls "C:\Windows\System32\DriverStore\FileRepository\usbdrvco.inf_amd64\_87cd3882f8de0a03" /grant Administrators:F /T /C /Q
rmdir /s /q "C:\Windows\System32\DriverStore\FileRepository\usbdrvco.inf_amd64\_87cd3882f8de0a03"需要管理员权限时,把命令写成 .bat,再用:
Start-Process -FilePath 'C:\path\to\clean.bat' -Verb RunAs成脚本执行比逐条手工敲要稳,也方便复查和复用。
# 1. 驱动文件是否已删
ls /c/Windows/System32/drivers/PassGuard\_x64.sys
# 2. 服务是否已消失
sc query PassGuard
# 3. oem INF 里是否还有残留
grep -rliE "huawei|usbdrv|passguard" /c/Windows/INF/oem\*.inf
# 4. HVCI 状态
reg query "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity"
# 5. 固件层虚拟化是否就绪
systeminfo | grep -iE "虚拟机监控|Hyper-V"最后回到 Windows 安全中心 → 内核隔离,点**重新扫描**,开关即可打开。
本次结果:**内存完整性成功开启 ✅**,并额外解锁了「内核模式硬件强制堆栈保护」。

| 坑 | 现象 | 解法 |
| ----------------- | ----------------------------- | --------------------------------------- |
| PowerShell 输出不回显 | exit 0 但没有 stdout | 改用 Bash + find / grep / reg query |
| 中文输出乱码 | sc query / pnputil 返回 GBK | 管道接 iconv -f GBK -t UTF-8 |
| DriverStore 目录删不掉 | 拒绝访问 | takeown + icacls + rmdir /s /q |
| 驱动文件删不掉 | 被占用 | 重启后删,服务 DeleteFlag 也要等重启 |
| **漏网之鱼** | 同一驱动有多份 INF | 必须全量扫 oem\*.inf,不能只删安全中心列出的 |
| **误判归属** | 只看文件名 | 用 PDB 路径 + 卸载项 DisplayName 交叉验证 |
本次就吃了一个漏网之鱼的亏:安全中心只列了一个 USBDrv.sys,实际系统里藏着两套 SDT 残留——usbdrvco.inf 目录 + 真正安装过的 oem49.inf,两套都得清。
**本文的「清理华为驱动」逻辑,只适用于「华为软件卸载后的残留」。**
如果你用的是**华为原厂笔记本**,华为驱动是硬件正常工作所必需的(指纹识别、电源管理、显卡切换、快捷键、多屏协同),**严禁套用本文的清理操作**,误删会直接导致硬件功能失效。
判断标准很简单:设备管理器里还有没有在用的华为设备?有,就一个都别动。
回顾整件事,真正耗时的不是执行,而是**在几十个 oem INF、几百兆的驱动库里做交叉比对和归属判定**。这类工作有三个特点:
pnputil 得配合着用;WorkBuddy 的价值在于:它能把这些串成一条流水线自己跑完,只在真正要删除的那一刻停下来确认。**读和查它全权处理,删之前它会先告诉你影响范围。**
最后一点体会:**AI 给结论前,也要给它交叉验证的习惯。** 这次如果不是查了卸载注册表项,就会把央行征信中心的控件当成农行网银,给出一个听起来很自信、实际完全错误的建议。
# 列出所有第三方驱动包
ls /c/Windows/INF/oem\*.inf
# 按关键字搜驱动包
grep -rliE "关键字" /c/Windows/INF/oem\*.inf
# 读 INF 厂商信息
grep -aiE "^\s\*(Provider|Class|DriverVer)\s\*=" /c/Windows/INF/oemXX.inf
# 枚举驱动包
pnputil /enum-drivers
# 删除驱动包
pnputil /delete-driver oemXX.inf /uninstall /force
# 枚举/移除设备
pnputil /enum-devices /instanceid "<实例ID>"
pnputil /remove-device "<实例ID>"
# 查服务
sc query <服务名>
reg query "HKLM\SYSTEM\CurrentControlSet\Services\<服务名>"
# 查软件卸载项(拿真名)
reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" /s /f "关键字"原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。