13

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

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

编辑

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

4

4 回答 4

13

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

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

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

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

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

于 2008-11-07T13:02:43.483 回答
3

另请查看存储有关 USB 设备的所有信息的注册表。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB

您可以挂钩注册表中该键的更改并据此采取行动。

这个免费的实用程序在四处寻找时有很大帮助:http: //www.nirsoft.net/utils/usb_devices_view.html

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

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

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

查看 .Net 中的 System.Management

于 2008-11-07T13:28:04.460 回答
1

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

如果您真的对此感到偏执,只需打开机器并拔掉端口即可。

于 2008-11-07T12:34:55.613 回答
0

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

于 2008-11-07T12:29:59.103 回答