2 leave rainbow Leave_RAINBOW 于 2016.03.16 15:43 提问

windows GUID SetupDiGerClassDevs(...)获取USB设备信息失败

下面这段代码是为了获取本机USB设备驱动handle的,可是逐句运行的时候,
SetupDiGerClassDevs返回值老是 INVALID_HANDLE_VALUE。

#pragma comment(lib,"setupapi")   //ERROR linkerror 1120 
#include<Windows.h>
#include<SetupAPI.h>
#include<iostream>
#include<initguid.h>   //GUDI header
#include<Usbiodef.h>   //USB GUID header

//USB 设备的GUID
BOOL GetDevs(HDEVINFO &hdevino) {
    hdevino = SetupDiGetClassDevs((LPGUID)&GUID_DEVINTERFACE_USB_DEVICE, 0, 0, DIGCF_DEFAULT | DIGCF_DEVICEINTERFACE);
    if (hdevino = INVALID_HANDLE_VALUE)
        return false;
    else
        return true;
}

void EnumDevice(HDEVINFO &hdevino,SP_DEVINFO_DATA &DeviceInfoData) {
    for (DWORD i = 0; SetupDiEnumDeviceInfo(hdevino, i, &DeviceInfoData); i++)
        std::cout << "element is " << i << std::endl;
}

int main()
{
    HDEVINFO deinfo;
    SP_DEVINFO_DATA DeviceInfoData;
    if (GetDevs(deinfo) == true)
    {
        std::cout << "succeed" << std::endl;
        EnumDevice(deinfo, DeviceInfoData);
    }
    else {
        std::cout << "fail" << std::endl;
    }
    return 0;
}

大侠们,帮帮忙把把问题所在,论坛新人,还没有币给大家。。sorry

2个回答

liuzhihan209
liuzhihan209   2016.03.16 15:59
  **    如果函数运行成功,返回设备信息结构的句柄,该结构包含与指定参数匹配的所有已安装设备。如果失败,则返回INVALID_HANDLE_VALUE。调用GetLastError可以获得更多错误信息。**
Leave_RAINBOW
Leave_RAINBOW 但是,GUID_DEVINTERFACE_USB_DEVICE 这个GUDI 接口参数定义在#include<initguid.h> 和#include<Usbiodef.h>中,我的电脑也不会缺USB驱动呀。。
2 年多之前 回复
Leave_RAINBOW
Leave_RAINBOW 试过了,返回错误0018. 使用 VS提供的ERROR LOOKUP 工具查找0018对应的错误是“没有找到对应的文件”
2 年多之前 回复
liuzhihan209
liuzhihan209   2016.03.28 14:20

返回错误0018 ,我晕 ,GetLastError(),会 返回 这个吗??十六进制??不是 DWORD 类型吗?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
QT5获取USB设备信息+PID+VID+序列号+热插拔
1.使用nativeEvent事件获取相关信息 2.界面是一个QDialog,设备vid pid 序列号已提取好,将显示在上面 3.附带源码,同时静态编译的了一个应用程序,可直接运行 4.测试环境为qt5.3.2+vs2013 5.给需要的人作参考,更多功能请自行拓展,不喜勿下哦!
java 获取USB外接设备信息demo
java 获取 USB 外接设备 信息 pid vid 例子
监控USB存储,获取插入的USB设备硬件信息(.net代码)
通过重载消息函数监控USB插拔事件,同时通过WMI获取新插入设备的硬件信息。
C#获取外接USB设备信息,包括VID,PID
该项目采用wmi技术开发,界面采用WPF技术
获取系统设备信息--读取MBR
获取系统设备信息获取系统设备信息获取系统获取系统设备信息设备信息
DELPHI 做的USB调用
学习用,需要的下载吧 function Open(usbguid:String) :boolean; //打开USB设备 procedure Close(); //关闭USB设备 procedure WriteBytes(bs:TDataBuffer); //向USB设备发送字节数组 function ReadBytes():TDataBuffer; //从USB设备读取数据
获取Guid唯一码
获取Guid唯一码
获取USB设备信息
一获取USB信息的库,有源码,和一个测试程序
USB设备信息获取
USB设备信息读取代码 Access 0 Availability BlockSize Caption G: Compressed False ConfigManagerErrorCode ConfigManagerUserConfig CreationClassName Win32_LogicalDisk Description Removable Disk DeviceID G: DriveType 2 ErrorCleared ErrorDescription ErrorMethodology FileSystem FAT32 FreeSpace 2529968128 InstallDate LastErrorCode MaximumComponentLength 255 MediaType Name G: NumberOfBlocks PNPDeviceID PowerManagementCapabilities PowerManagementSupported ProviderName Purpose QuotasDisabled QuotasIncomplete QuotasRebuilding Size 15594848256 Status StatusInfo SupportsDiskQuotas False SupportsFileBasedCompression False SystemCreationClassName Win32_ComputerSystem SystemName EVAN-PC VolumeDirty True VolumeName GSP1RMCULXF VolumeSerialNumber B4FE5315
获取USB设备 VID PID 序列号
获取USB设备 VID PID 序列号,在vc2005测试通过。除了源码还提供现成的MyUSB.EXE程序直接获取USB设备信息。