C#怎么获取已知USB设备驱动信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#怎么获取已知USB设备驱动信息相关的知识,希望对你有一定的参考价值。

参考技术A 使用WMI中的Win32_PnPSignedDriver类

Win32_PnPSignedDriver的详细信息:http://msdn2.microsoft.com/en-us/library/aa394354.aspx
使用WMI(Windows Management
Instrumentation)是最为方便的方法。可以根据下面的程序片段来得到我们所需要的DriverVersion。
private string GetDriverVersion( string hardwareID )

string queryString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver";
SelectQuery selectQuery = new SelectQuery( queryString );
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);

foreach (ManagementObject mo in searcher.Get())

object tempID = mo["HardwareID"];
if( tempID!=null && tempID.ToString().ToUpper() == hardwareID.Trim().ToUpper() )

return mo["DriverVersion"].ToString();



return "UnknownVersion";

这个方法唯一不好的方面是不支持Windows2000,只有Windows Vista,Windows XP和Windows
2003支持这个类。

如果将笔式驱动器插入 USB 端口,如何使用 c# 检测?

【中文标题】如果将笔式驱动器插入 USB 端口,如何使用 c# 检测?【英文标题】:How to detect using c# if a pendrive is plugged into a USB port? 【发布时间】:2010-09-21 06:38:54 【问题描述】:

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

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

编辑

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

【问题讨论】:

【参考方案1】:

[假设 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()。您将拥有一个匹配的卷名;这是新驱动器。

【讨论】:

呸,URL 解析器错误。 WM_DEVICECHANGE 文档@msdn.microsoft.com/en-us/library/aa363480(VS.85).aspx【参考方案2】:

还可以查看存储有关 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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

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

以上是关于C#怎么获取已知USB设备驱动信息的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows XP 上获取现有 USB 设备的 GUID

在 C# 中查找有关通过 USB 连接的所有串行设备的信息

C#:基于WMI查询USB设备信息 及 Android设备厂商VID列表

C#怎么获取BLE蓝牙的数据?

请教,Linux怎样查看usb设备的详细信息

如何在 vc++ 中获取 USB 存储设备的详细信息