如何用C#实时启用/禁用Windows系统USB存储设备?
如何编程实现Windows上USB存储设备的实时启用/禁用?
需求说明
- 需通过编程方式在Windows机器上启用/禁用USB存储设备,核心要求是实时生效:
- 已连接的USB存储设备,运行代码后需立即被禁用/阻止,无需拔出再插入
- 在解除限制前,不允许新的USB存储设备接入
手动操作的观察与问题
- 手动修改本地组策略可实现该功能(对应组策略中“所有可移动存储类:拒绝所有权限”设置界面)
- 手动修改组策略时,会将注册表项
Deny_All设为1或0,但直接修改该注册表项后,必须重新插拔设备才能生效(对应注册表HKLM\SOFTWARE\Policies\Microsoft\Windows\RemovableStorageDevices\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}路径下的Deny_All项) - 修改另一注册表项(
HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR下的Start值)也能阻止/解除USB存储设备,但该方案仅对新插入的设备生效,无法影响已连接的设备
核心疑问
如何实现USB存储设备的立即启用/禁用?或者有没有办法在直接修改注册表值后,刷新系统设置使其立即生效?
可接受的实现方式限制
- 不使用第三方exe和WMI
- 可接受PInvoke、运行cmd进程等原生Windows编程方式
已尝试但无效的代码
根据建议尝试调用RefreshPolicyEx刷新组策略,但未达到预期效果,代码如下:
class Program { private enum RefreshPolicyOptions { RP_FORCE = 1, RP_SYNC } [DllImport("userenv.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] private static extern bool RefreshPolicyEx(bool bMachine, RefreshPolicyOptions dwOptions); static void Main() { try { Console.WriteLine("Refreshing group policy..."); bool flag = RefreshPolicyEx(true, RefreshPolicyOptions.RP_FORCE); Console.WriteLine("Group policy refreshed: " + flag); } catch (ManagementException e) { Console.WriteLine("An error occurred while querying WMI: " + e.Message); } } }
内容的提问来源于stack exchange,提问作者Vivek Nuna
相关产品推荐
相关产品推荐

