You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:45:04