如果我想阻止/解除阻止 USB 设备,我在 cmd 中运行:
:block
reg add "HKLM\SYSTEM\CurrentControlSet\services\USBSTOR" /v Start /t REG_DWORD /d 4 /f
:unblock
reg add "HKLM\SYSTEM\CurrentControlSet\services\USBSTOR" /v Start /t REG_DWORD /d 3 /f
我想要的是:
生成已连接 USB 设备的白名单(任何 USB,包括键盘、USB 存储、鼠标等)。(已解决wmic 路径 Win32_USBControllerDevice 获取 * > usb.txt)
锁定/解锁所有 USB 设备(白名单除外)。在 Linux 中可以使用 udev 完成。我不知道在 Windows 中如何完成。
笔记:拜托。我更喜欢使用 batch/wmic/regedit/cmd 等USB查看器或其他 GUI 解决方案。我对基于 Powershell 的解决方案也不感兴趣
我为解决问题而进行的研究:我找到了一个基于 Devcon 的脚本集合。有一个叫更新USB。此脚本删除所有 USB 设备,然后重新扫描新设备。它最终可以作为我想要的起点。
在此下载 devcon微软旧链接. 使用命令获取所有 USB 设备的驱动程序列表:
%windir%\system32\devcon.exe DriverFiles =USB > usb.txt
%windir%\system32\devcon.exe find USB\* > usb.txt
%windir%\system32\devcon.exe find *VID* > usb.txt
PD:大多数 USB 都有标识符“VID”和“USB”。例如:
USB\VID_1C4F&PID_0002&MI_01\6&1578F7C2&0&0001 : Input device USB
HID\VID_1C4F&PID_0002&MI_00\7&2B89365C&0&0000 : Keyboard device HID
要阻止/取消阻止(usb.txt 的特定设备):
USB\VID_13FE&PID_1D00\5B7912980144 : USB storage device
%windir%\system32\devcon.exe disable *VID_13FE*
%windir%\system32\devcon.exe enable *VID_13FE*
阻止/解除阻止所有 USB 设备
%windir%\system32\devcon.exe disable *VID* *USB*
%windir%\system32\devcon.exe enable *VID* *USB*
有时 devcon 不会禁用所有 usb。只有少数情况如此。例如:
USB\VID_1C4F&PID_0002&MI_01\6&1578F7C2&0&0001 : Disabled
HID\VID_1C4F&PID_0002&MI_00\7&2B89365C&0&0000 : Disable failed
这种情况下没办法,只能把命令“disable”换成“remove”。
%windir%\system32\devcon.exe remove *VID* *USB*
但是 devcon 并不是锁定和解锁设备的永久解决方案(就像 reg add 一样)。测试是,我们可以锁定一个 usb 设备,然后运行 bash 脚本更新USB_2K,我们将看到脚本重新安装了 USB 驱动程序,并且锁定的 USB 设备再次变得可访问。因此 devcon 不是我的请求的解决方案。
提前致谢
更新:
已经实现此目的的解决方案。您可以投票关闭此问题
答案1
请参阅以下有关如何通过组策略限制和允许设备的 Technet 文章。具体来说,策略Prevent installation of devices not described by other policy settings
和Allow installation of devices that match any of these device IDs
策略。您需要生成所有设备的列表,而不仅仅是 USB 设备。因为我不确定该策略是否会阻止新安装或阻止现有安装的设备加载其驱动程序。即使只是新安装,也要考虑安装新驱动程序将算作安装新硬件。
https://technet.microsoft.com/en-us/library/2007.06.grouppolicy.aspx
https://technet.microsoft.com/en-us/library/cc772161(v=ws.10).aspx
如果您坚持使用命令行,则可以使用 powershell 创建组策略对象:
https://technet.microsoft.com/en-us/library/ee461027.aspx
要使用 powershell 获取系统上当前安装的所有设备的列表,请参阅此答案
Powershell 脚本将设备管理器中的所有设备导出为树或列表?
据我所知,您无法使用旧版 Microsoft 命令提示符/批处理文件执行此操作。无论如何,您都应该切换到 powershell,因为 MS 在最新的 Windows 10 内部版本中默认禁用了旧版命令提示符,并且可能会在下一次重大更新中向所有用户做出此更改。