如何使用c#检测pendrive是否插入USB端口?

如何使用c#检测pendrive是否插入USB端口?,c#,windows,usb,monitoring,usb-flash-drive,C#,Windows,Usb,Monitoring,Usb Flash Drive,有没有办法确定局域网中何时有人将pendrive插入USB端口? 通过编程(最好用C语言)或通过某种工具。基本上,我会想象一个客户端应用程序位于每个终端上,监控USB端口并将信息发送到服务器 a、 )我可以获取正在复制的文件的详细信息吗? b、 )有没有一种不用客户端应用程序就能做到这一点的方法 编辑 我不想完全禁用USB端口。这是一个需要有基础的。基本上,我们只是希望局域网上的用户能够负责任地共享数据,并知道传输的任何数据都会被监控和记录,并且可以在以后被询问。您是否试图阻止使用USB拇指驱动

有没有办法确定局域网中何时有人将pendrive插入USB端口? 通过编程(最好用C语言)或通过某种工具。基本上,我会想象一个客户端应用程序位于每个终端上,监控USB端口并将信息发送到服务器

a、 )我可以获取正在复制的文件的详细信息吗? b、 )有没有一种不用客户端应用程序就能做到这一点的方法

编辑


我不想完全禁用USB端口。这是一个需要有基础的。基本上,我们只是希望局域网上的用户能够负责任地共享数据,并知道传输的任何数据都会被监控和记录,并且可以在以后被询问。

您是否试图阻止使用USB拇指驱动器?如果存在允许您限制访问的组策略。

如果这是一个小环境,并且您想要阻止任何usb设备被使用,那么您可以在设备管理器中禁用usb端口,确保没有用户被设置为计算机上的管理员,这将阻止所有usb设备的使用


如果你真的对此心存疑虑,只需打开机器并拔出端口。

[假设使用Windows,给出C#注释。请相应地标记]

是的,这是可能的。而且可以得到文件的详细信息。不过,这需要编程。观察驱动器,然后重新枚举驱动器。它将为您提供USB Pendrive,但也提供SD卡。我想这是你的奖金

要了解驱动器到达后的更多详细信息,请使用

更新 我找到了一个更好的解决方案-如果注册卷接口通知,您将获得新驱动器的卷路径。 首先,使用
dbcc\u classguid=GUID\u DEVICEINTERFACE\u VOLUME
创建一个
DEV\u BROADCAST\u DEVICEINTERFACE
。然后将其传递给
RegisterDeviceNotification()
。您将再次获得WM_DEVICECHANGE,但现在可以将消息中的LPRAM强制转换为
DEV_BROADCAST_DEVICEINTERFACE*


您可以将收到的
dbcc\u名称
传递到
GetVolumeNameForVolumeMountPoint()
。您还可以将所有驱动器号从
GetLogicalDriveStrings()
传递到
getVolumeNameForVolumeMoontPoint()
。您将有一个匹配的卷名;这是新的驱动器。

还可以查看存储有关usb设备的所有信息的注册表。 HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Enum\USB

您可以挂接到注册表中该项的更改,并据此采取行动

这个免费的实用程序对四处拉屎有很大帮助:

您可以选择一个usb驱动器,选择打开该驱动器的注册表项,启用/禁用该设备,等等

在注册表中,您可以查看设备是否已连接、是否为massstorage类型以及其他相互测试信息。它很容易过滤注册表项,只需获取usb海量存储驱动器,然后挂接并等待更改(连接/断开连接)

使用Windows Management Instrumentation,您可以注册以接收注册表事件:


在.Net中查看System.Management

并非完全如此。这是一个需要有基础的。基本上只是想让局域网上的用户负责任地共享数据,并知道传输的任何数据都会被监视和记录,以后可以被询问。呸,URL解析器错误。WM_设备更改文档@