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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!