如果使用c#如果探测器插入USB端口,如何检测?

有没有办法找出什么时候在一个局域网里任何人都可以在USB端口上插入一个数据盘? 以编程方式(最好在C#中)或通过某种工具。 基本上我会想象一个客户端应用程序坐在每个terminal上,并监视USB端口,并将信息发送到服务器。

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

编辑

我不想完全禁用USB端口。 它是需要有基础的。 基本上只是希望局域网上的用户负责任地共享数据,并且知道无论传输什么数据都被监控和logging,并且可以在以后被质疑。

[假设Windows,给C#的评论。 请相应标记]

是的,这是可能的。 有可能获得文件的详细信息。 但是,这将需要编程。 注意WM_DEVICECHANGE,然后重新枚举驱动器。 它会得到你的USB pendrives,但也是SD卡。 我希望这是你的奖金。

一旦知道驱动器已经到达,要获取更多详细信息,请使用System.IO.FileSystemWatcher

更新我找到了一个更好的解决方案 – 如果您注册音量接口通知,您将获得新驱动器的音量路径。 首先,使用dbcc_classguid=GUID_DEVINTERFACE_VOLUME创建一个dbcc_classguid=GUID_DEVINTERFACE_VOLUME 然后传递给RegisterDeviceNotification() 您将再次获得一个WM_DEVICECHANGE,但是现在可以将该消息的lParam转换为DEV_BROADCAST_DEVICEINTERFACE*

您可以将您收到的dbcc_name传递给GetVolumeNameForVolumeMountPoint() 您也可以将GetLogicalDriveStrings()所有驱动器号传递给GetVolumeNameForVolumeMountPoint() 你将有一个匹配的卷名称; 这是新的驱动器。

另外检查注册表的所有信息存储有关的USB设备。 HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \枚举\ USB

您可以将注册表中的密钥更改挂钩,然后采取相应措施。

这个免费的实用程序是一个很大的帮助,当四处游览: http ://www.nirsoft.net/utils/usb_devices_view.html

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

在注册表中,您可以看到设备是否已连接,是否为大容量存储类型和其他中间信息。 它很容易过滤重新命令只是让usb大容量存储驱动器,然后挂钩并等待更改(连接/断开)。

使用Windows Management Instrumentation,您可以注册以接收注册表事件: http : //msdn.microsoft.com/zh-cn/library/aa393035( VS.85) .aspx

在.Net中查看System.Management

如果它是一个小环境,你想防止任何USB设备被使用,那么你可以禁用设备管理器的USB端口,确保没有用户设置为管理员在机器上,并应该防止所有的USB使用。

如果你真的对此犹豫不决,只需打开机器并将端口拔出即可。

看看这篇文章。 解释信息和如何与他们合作。 检测USB驱动器的删除

我从来没有使用它,但ic#代码(sharpdevelop)的人有一个usblib。 也许它可以帮助你。

http://www.icsharpcode.net/OpenSource/SharpUSBLib/default.aspx

你是否试图阻止使用USB拇指驱动器? 如果是这样,有一个组策略允许您限制访问。