有没有办法找出什么时候在局域网中有人插入到USB端口的pendrive? 以编程方式(最好在C#中)或通过某种工具。基本上我想象一个客户端应用程序位于每个终端上并监视USB端口并将信息发送到服务器。
a。)我可以获取正在复制的文件的详细信息吗? b。)没有客户申请,有没有办法做到这一点?
修改
我不想完全禁用USB端口。它需要有基础。基本上只是希望局域网上的用户能够负责任地共享数据,并且知道所传输的任何数据都会受到监控和记录,以后可能会被质疑。
答案 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拇指驱动器?如果是,则存在允许您限制访问的组策略。