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