繁体   English   中英

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

[英]How to detect using c# if a pendrive is plugged into a USB port?

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

a。)我可以获取要复制的文件的详细信息吗? b。)有没有客户端应用程序的方法吗?

编辑

我不想完全禁用USB端口。 它需要有基础。 基本上,只是希望LAN上的用户负责任地共享数据,并且知道要监视和记录传输的任何数据,以后可以提出质疑。

[假定Windows,给出C#标记。 请相应地标记]

是的,这是可能的。 并且可以获取文件的详细信息。 不过,这将需要编程。 注意WM_DEVICECHANGE,然后重新枚举驱动器。 它可以为您提供USB Pendrive和SD卡。 我希望这对您来说是一个好处。

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

更新我发现了一个更好的解决方案-如果您注册了卷接口通知,则将获得新驱动器的卷路径。 首先,创建一个DEV_BROADCAST_DEVICEINTERFACEdbcc_classguid=GUID_DEVINTERFACE_VOLUME 然后将其传递给RegisterDeviceNotification() 您将再次获得WM_DEVICECHANGE,但现在可以将消息中的lParam投射到DEV_BROADCAST_DEVICEINTERFACE*

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

还请检查注册表,其中存储了有关USB设备的所有信息。 HKEY_LOCAL_MACHINE \\ SYSTEM \\ CurrentControlSet \\ Enum \\ 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拇指驱动器? 如果是这样,则存在一个允许您限制访问权限的组策略。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM