本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
查看: 3863|回复: 0

使用SetupDiEnumDeviceInterfaces(),返回总是259,没有可用数据 [复制链接]

Rank: 1

发表于 2012-11-29 11:36:39 |显示全部楼层
我想做一个查询特定class guid的设备信息,主要是查询他的设备路径。我参照了win ddk中的usbview的code,但是现在出现的问题是我一调用SetupDiEnumDeviceInterfaces(),返回的总是false,getlasterror()是0x103(259)。现在我将我的这一部分code贴出来,望大家指导下:
HDEVINFO DeviceInfo;
SP_DEVICE_INTERFACE_DATA spDeviceInterfaceData;
SP_DEVICE_INTERFACE_DETAIL_DATA spDeviceInterfaceDataDetail;
DWORD dwIndex = 0x0;
BOOL bFlag = TRUE;
DWORD dwReturnlen = 0x0;
DWORD dwDetailSize = offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA,DevicePath)+ sizeof(TCHAR);
GUID Spbguid ={0x78A1C341, 0x4539, 0x11d3, 0xB8, 0x8D, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x71};
GUID Iicguid = {0x4d36e97d, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18};

DeviceInfo = SetupDiGetClassDevs((LPGUID)&Spbguid,
                                    NULL,
                                             NULL,
                                   DIGCF_PRESENT | DIGCF_DEVICEINTERFACE
                        );
if(INVALID_HANDLE_VALUE == DeviceInfo)
{
        printf("SetupDiGetClassDevs() fail,Getlasterror() = %x\n", GetLastError());
        goto exit;
}

do
{
        spDeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
        bFlag = SetupDiEnumDeviceInterfaces(DeviceInfo,
                                                0,
                                        (LPGUID)&Spbguid,
                                        dwIndex,
                                        &spDeviceInterfaceData
                                        );
        if(!bFlag)
        {
                printf("SetupDiEnumDeviceInterfaces() fail,Getlasterror() = %x, dwIndex = %x\n",
                                        GetLastError(), dwIndex);
                goto exit;
        }

        spDeviceInterfaceDataDetail.cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
        bFlag = SetupDiGetDeviceInterfaceDetail(DeviceInfo,
                                        &spDeviceInterfaceData,                                                                        &spDeviceInterfaceDataDetail                                                                                dwDetailSize,                                                                                        &dwReturnlen,                                                                                        NULL
                                        );
        if(bFlag)
        {
                wprintf(L"%s", spDeviceInterfaceDataDetail.DevicePath);
        }
        else
        {
                bFlag = TRUE;
                printf("SetupDiGetDeviceInterfaceDetail() fail,Getlasterror() = %x, dwIndex = %x\n",
                                        GetLastError(), dwIndex);
        }

        dwIndex++;

}while(bFlag);

我仔细查询过,GUID没有写错,所以我也不清楚哪里出错了,希望大家帮忙看下
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-7-22 08:21 , Processed in 0.025830 second(s), 8 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部