c - 如何以编程方式实现特定 USB 设备的序列号和其他详细信息?

标签 c winapi

如何获取有关特定 USB 的信息? 序列号、制造商编号、产品编号等信息

我可以通过这个函数获取USB的句柄

CreateFile(L"\\\\.\\E:", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

但是从现在开始我就陷入了困境,HidD_GetHidGuid,仅返回硬盘的详细信息,而 GetRawInputDeviceListGetRawInputDeviceInfo 不允许我获取有关 USB 的信息(按名称,如使用函数 CreateFile 的示例)

当我尝试以下代码时:

DeviceIoControl(HandelUsb, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &dg, sizeof(DISK_GEOMETRY),&dwReturned, NULL);
MEDIA_SERIAL_NUMBER_DATA msnd = { 0 };
DeviceIoControl(HandelUsb, IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER, NULL, 0, &msnd,sizeof(MEDIA_SERIAL_NUMBER_DATA), &dwReturned, NULL);

我总是得到序列号 0 ... (我在不同的USB设备上尝试过)

最佳答案

您可以使用SetupDi功能。看看SetupDiGetClassDevs函数将返回所有连接的设备。对于 USB 设备,请使用“USB”枚举器。

关于c - 如何以编程方式实现特定 USB 设备的序列号和其他详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032292/

相关文章:

c# - C# 中的 C 方法 Fread() 等效项

c++ - 在 Win32 上如何将线程移动到另一个 CPU 核心?

c - 使用 fread 函数读取二进制文件时出现问题

c++ - Hook OutputDebugStringA 引发异常

c++ - 子类化另一个应用程序的控件?

c++ - 从另一个应用程序窗口中的文本字段读取

c - 将 sendfile() 与 SSL 结合使用时出现问题

c - C 函数的一个参数丢失

c++ - 将文件存储在 TEMP 目录中是否足够安全

c++ - 如何在获取事件后延迟 1s 复制文件?