翻了一些资料,获取到以下信息:
当一个USB设备插入电脑时,系统的PnP管理器会向设备发送IRP_MN_QUERY_CAPABILITIES,设备驱动层则会返回DEVICE_CAPABILITIES,并在其中声明自己是否支持被移除,若支持则会显示在安全弹出硬件中,反之则不显示。
这也解释了为什么上面通过修改Capabilities值的方式在重新插拔后会失效,因为设备驱动层会重新返回DEVICE_CAPABILITIES导致Capabilities的值被覆盖
我在翻阅微软的官方文档发现了一个新方法,这个方法会使系统忽略设备驱动层返回的DEVICE_CAPABILITIES中的可移动属性,强制将其视为不可移动设备。这个方法和修改Capabilities值的效果一样,会使相关设备不出现在安全删除硬件中,但更加底层而且效果是永久的,不需要写计划任务反复修改。可将下方内容复制到记事本中,将VID和PID更改为无线网卡的实际ID,然后更改后缀为reg导入注册表,相关更改将在重启电脑后生效。不需要隐藏设备了直接删除USB#VID_0951&PID_1665注册表项即可(注意ID以实际为准)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceOverrides\USB#VID_0951&PID_1665\LocationPaths\*]
"Removable"=dword:00000000
上述注册表项只作用于父设备,若需要同时隐藏子设备则需额外增加该注册表项
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceOverrides\USB#VID_0951&PID_1665\ChildLocationPaths\*]
"Removable"=dword:00000000
更改后的注册表关系如下:



参考资料:
使用 USB 可移动功能进行设备容器分组
可移动设备功能概述
通过可移动设备功能生成的容器 ID
IRP_MN_QUERY_CAPABILITIES
DEVICE_CAPABILITIES 结构 (wdm.h)
通过可移动设备功能重写生成的容器 ID
如何让 USB 设备不显示安全删除硬件弹出选项