如果将pendrive插入USB端口,如何使用c#进行检测?

时间:2008-11-07 12:21:25

标签: c# windows usb monitoring usb-flash-drive

有没有办法找出什么时候在局域网中有人插入到USB端口的pendrive? 以编程方式(最好在C#中)或通过某种工具。基本上我想象一个客户端应用程序位于每个终端上并监视USB端口并将信息发送到服务器。

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

修改

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

6 个答案:

答案 0 :(得分:13)

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

是的,这是可能的。并且可以获取文件的详细信息。但是,它需要编程。注意WM_DEVICECHANGE并在之后重新枚举驱动器。它将为您提供USB pendrives,还有SD卡。我希望这对你来说是一个奖励。

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

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

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

答案 1 :(得分:3)

还要检查注册表中存储有关USB设备的所有信息。 HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \枚举\ USB

您可以挂钩注册表中该键的更改并对其进行操作。

这个免费的实用程序是一个很大的帮助:po http://www.nirsoft.net/utils/usb_devices_view.html

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

在注册表中,您可以查看设备是否已连接,是否为massstorage类型和其他interresting信息。它很容易过滤regkeys以获得usb-massstorage驱动器,然后挂钩并等待更改(连接/断开连接)。

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

查看.Net中的System.Management

答案 2 :(得分:1)

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

如果你对它真的很偏执,只需打开机器并拔出端口。

答案 3 :(得分:1)

看看这篇文章。解释消息以及如何使用它们。 Detecting usb drive removal

答案 4 :(得分:1)

我从未使用它,但ic#code(sharpdevelop)的人有一个usblib。也许它可以帮到你。

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

答案 5 :(得分:0)

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