如果将pendrive插入USB端口,如何使用c#进行检测?
-
07-07-2019 - |
题
有没有办法找出什么时候在局域网中有人插入到USB端口的pendrive? 以编程方式(最好在C#中)或通过某种工具。基本上我想象一个客户端应用程序位于每个终端上并监视USB端口并将信息发送到服务器。
a。)我可以获取正在复制的文件的详细信息吗? b。)没有客户申请,有没有办法做到这一点?
修改
我不想完全禁用USB端口。它需要有基础。基本上只是希望局域网上的用户能够负责任地共享数据,并且知道所传输的任何数据都会受到监控和记录,以后可能会被质疑。
解决方案
[假设Windows,给出了C#评论。请相应标记]
是的,这是可能的。并且可以获取文件的详细信息。但是,它需要编程。请注意 WM_DEVICECHANGE 并在之后重新枚举驱动器。它将为您提供USB pendrives,还有SD卡。我希望这对你来说是一个奖励。
要在知道驱动器到达后获取更多详细信息,请使用 System.IO.FileSystemWatcher
<强>更新强>
我找到了一个更好的解决方案 - 如果您注册了卷接口通知,您将获得新驱动器的卷路径。
首先,使用 dbcc_classguid = GUID_DEVINTERFACE_VOLUME
创建 DEV_BROADCAST_DEVICEINTERFACE
。然后将其传递给 RegisterDeviceNotification()
。您将再次获得WM_DEVICECHANGE,但现在可以将消息中的lParam转换为 DEV_BROADCAST_DEVICEINTERFACE *
。
您可以将收到的 dbcc_name
传递给 GetVolumeNameForVolumeMountPoint()
。您还可以将 GetLogicalDriveStrings()
中的所有驱动器号传递给 GetVolumeNameForVolumeMountPoint()
。您将拥有一个匹配的卷名称;这是新的驱动器。
其他提示
还要检查注册表中存储有关USB设备的所有信息。 HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \枚举\ USB
您可以挂钩注册表中该键的更改并对其进行操作。
这个免费的实用程序是一个很大的帮助,当你四处寻找时: http://www.nirsoft。净/ 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
如果它是一个小环境,并且您想要阻止使用任何USB设备,那么您可以在设备管理器中禁用USB端口,确保没有用户在计算机上设置为管理员,这应该阻止所有usb使用
如果你对它真的很偏执,只需打开机器并拔出端口。
看看这篇文章。解释消息以及如何使用它们。 检测USB驱动器移除
我从未使用它,但ic#code(sharpdevelop)的人有一个usblib。也许它可以帮到你。
http://www.icsharpcode.net/OpenSource/SharpUSBLib/default.aspx
您是否在尝试阻止使用USB拇指驱动器?如果是,则存在允许您限制访问的组策略。