C#禁用USB的两种方法(附代码)

本文介绍了两种禁用USB的方法,一是通过修改注册表中的Start值实现,二是通过独占USB驱动文件达到目的。前者简单易行但容易被发现,后者不易被察觉但只能禁用未使用过的U盘。

方法一:通过修改注册表禁用USB

原理:只要把注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR路径下的Start值改成4即可禁用USB(默认为3,即允许USB)。

优点:简单易行。

缺点:地球人都知道,很容易识破。

建议:用一个timer或者创建一个线程,来锁定这个值。

程序代码:

using Microsoft.Win32;

/// <summary>
/// 通过注册表启用USB
/// </summary>
/// <returns></returns>
public bool RegToRunUSB() 
{
    try
    {
        RegistryKey regKey = Registry.LocalMachine; //读取注册列表HKEY_LOCAL_MACHINE
        string keyPath = @"SYSTEM\CurrentControlSet\Services\USBSTOR"; //USB 大容量存储驱动程序
        RegistryKey openKey = regKey.OpenSubKey(keyPath, true);
        openKey.SetValue("Start", 3); //设置键值对(3)为开启USB(4)为关闭
        openKey.Close(); //关闭注册列表读写流
        return true;
    }
    catch (Exception ex) 
    {
        throw ex;
    }
}

/// <summary>
/// 通过注册表禁用USB
/// </summary>
/// <returns></returns>
public bool RegToStopUSB() 
{
    try
    {
        RegistryKey regKey = Registry.LocalMachine;
        string keyPath = @"SYSTEM\CurrentControlSet\Services\USBSTOR";
        RegistryKey openKey = regKey.OpenSubKey(keyPath, true);
        openKey.SetValue("Start", 4);
        openKey.Close();
        return true;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

方法二:通过独占USB驱动文件禁用USB

原理:如果U盘第一次在某个电脑上使用,电脑会自动安装该U盘的驱动信息,修改C:\Windows\inf\usbstor.inf和C:\Windows\inf\usbstor.PNF这两个文件。假如我们用C#程序以独占的形式打开他们,那么Windows便无法修改这两个文件,U盘驱动安装不上自然无法使用。

优点:简单易行,不容易识破。

缺点:只能禁用未在该电脑上使用过的U盘。

建议:一定要注意独占的时候文件打开对象要用类的成员变量(也就是模块级变量),如果用局部变量,会自动被托管程序释放,达不到独占的效果。

程序代码:

注:以下fs和fs1对象变量我是放在了窗体中,作为窗体类的成员变量。


using System.IO;

public FileStream fs = null;
public FileStream fs1 = null;

//以独占方式打开文件
fs = new FileStream("C:\\Windows\\inf\\usbstor.inf", FileMode.Open, FileAccess.Read, FileShare.None);
fs1 = new FileStream("C:\\Windows\\inf\\usbstor.PNF", FileMode.Open, FileAccess.Read, FileShare.None);

<think>嗯,用户想要一个关于EZ-USB FX3 SDK通信的完整例子代码。首先,我得确定用户的需求是什么。EZ-USB FX3是赛普拉斯(现英飞凌)的一款USB 3.0控制器,通常用于高速数据传输,比如视频采集或数据采集卡。用户可能正在开发相关的硬件设备,需要通过SDK进行固件和主机端的通信。 用户可能对FX3的SDK不太熟悉,或者刚开始接触,所以需要详细的示例代码。他们可能想知道如何配置FX3的固件,以及如何编写主机端的应用程序(比如使用C/C++或Python)来进行通信。需要确保示例包括初始化、数据传输等关键步骤。 首先,我应该回忆一下FX3 SDK的基本结构。FX3的固件通常使用C语言开发,而主机端可以使用CyAPI(C++库)或者libusb等库。考虑到用户可能需要一个简单的例子,可能选择CyAPI作为主机端的例子,但也要考虑跨平台的可能,比如Python的libusb。 接下来,需要分步骤构建示例。固件部分需要设置GPIF接或者UART、I2C等通信方式,但GPIF比较复杂,可能UART更简单。不过,可能用户需要的是USB批量传输的例子,所以固件中需要配置端点,处理主机请求,比如控制传输或者批量传输。 然后主机端部分,如果是Windows,CyAPI是常用的,但如果是跨平台,可能需要libusb。这里可能需要给出两种例子,或者选择其中一种。考虑到用户可能希望一个更通用的例子,可能选择libusb配合Python,这样代码更简洁,容易理解。 需要检查FX3 SDK中的示例代码,比如控制中心示例,或者批量回环测试。通常,FX3的固件在初始化时需要配置描述符,设置端点,然后进入循环处理请求。主机端需要打开设备,找到端点,进行读写。 可能需要确保代码的正确性,比如端点地址是否正确,传输类型是否为批量,以及缓冲区的处理。另外,USB的VID和PID需要匹配,用户需要根据实际设备修改。 最后,要提醒用户注意事项,比如安装驱动,权限问题,以及调试信息的使用。可能还需要提到使用CyU3PDebugPrint API输出调试信息,以及如何编译和加载固件。</think>以下是一个基于EZ-USB FX3 SDK的USB通信完整示例,包含固件端和主机端代码实现: ### 一、固件端代码 (C语言) ```c #include "cyu3system.h" #include "cyu3usb.h" #include "cyu3dma.h" #include "cyu3error.h" #define DMA_BUF_COUNT 4 /* DMA缓冲区数量 */ #define DMA_BUF_SIZE 1024 /* 每个缓冲区大小 */ CyU3PDmaChannel glChHandleUtoP; /* USB到GPIF的DMA通道句柄 */ /* USB连接事件回调 */ void CyFxUsbEventCallback( CyU3PUsbEventType_t evType, /* 事件类型 */ uint16_t evData /* 事件数据 */ ) { switch (evType) { case CY_U3P_USB_EVENT_CONNECT: /* USB连接时启用DMA通道 */ CyU3PDmaChannelSetXfer(&glChHandleUtoP, CY_U3P_DMA_TYPE_MANUAL, 0); break; case CY_U3P_USB_EVENT_RESET: case CY_U3P_USB_EVENT_DISCONNECT: /* USB断开时禁用DMA通道 */ CyU3PDmaChannelReset(&glChHandleUtoP); break; default: break; } } /* 应用程序入 */ void CyFxApplicationDefine(void) { CyU3PReturnStatus_t status = CY_U3P_SUCCESS; CyU3PUsbSpeed_t usbSpeed = CY_U3P_FULL_SPEED; /* 初始化USB控制器 */ status = CyU3PUsbStart(); if (status != CY_U3P_SUCCESS) { CyU3PDebugPrint(4, "USB初始化失败,错误码:%d\n", status); CyU3PThreadHalt(); } /* 配置USB描述符 */ CyU3PUsbSetDesc(CY_U3P_USB_SET_SS_DEVICE_DESCR, 0, (uint8_t *)CyFxUSB30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值