首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SetupDiEnumDeviceInterfaces失效问题

SetupDiEnumDeviceInterfaces失效问题
EN

Stack Overflow用户
提问于 2012-09-18 21:33:52
回答 1查看 4.9K关注 0票数 0

我有一个问题,让这上面的功能工作。我读过MSDN,在docs下面,这就是我想出来的,但是它失败了。

因此,我使用SetupDiGetClassDevs来列出所有设备的列表,然后存储到一个句柄。它工作正常,那么下一步是使用SetupDiEnumDeviceInterfaces枚举每个设备,并通过句柄值。这里是我丢失它的地方,它总是返回假的。希望你能给我一些关于我哪里出错的建议。感谢您的阅读。

代码语言:javascript
运行
复制
#include <windows.h>
#include <setupapi.h>
#include <stdio.h>
#pragma comment(lib,"SetupAPI") 
//
int main() 
{
    // Set up handles and data storage
    HDEVINFO hDevInfo;
    // Load GUID Classes
    static GUID GUID_DEVINTERFACE_USB_HUB={ 0xf18a0e88, 0xc30c, 0x11d0, {0x88, 0x15, 0x00, 0xa0, 0xc9, 0x06, 0xbe, 0xd8} }; 
    static GUID GUID_DEVINTERFACE_USB_DEVICE ={ 0xA5DCBF10L, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } }; 
    static GUID GUID_DEVINTERFACE_USB_HOST_CONTROLLER={ 0x3abf6f2d, 0x71c4, 0x462a, {0x8a, 0x92, 0x1e, 0x68, 0x61, 0xe6, 0xaf, 0x27}}; 
    // 
    SP_DEVICE_INTERFACE_DATA ifdata;
    // Create a HDEVINFO with all present devices.
    hDevInfo = SetupDiGetClassDevs(NULL,0, 0, DIGCF_PRESENT | DIGCF_ALLCLASSES | DIGCF_DEVICEINTERFACE);
    //
        if (INVALID_HANDLE_VALUE == hDevInfo)
        {
        return FALSE;
        }
        else
        {
        printf("Device info set handle for all devices attached to system: 0x%x\n", hDevInfo);
        }
    //
    BOOL bResult = TRUE;
    DWORD nCount = 0;
    //
        while (bResult)
        {
        //
            ifdata.cbSize=sizeof(ifdata);
            //  
            bResult = SetupDiEnumDeviceInterfaces(
            hDevInfo,  
            NULL,   
            &GUID_DEVINTERFACE_USB_DEVICE,   
            (ULONG)nCount,  
            &ifdata); 


        //
        if(!bResult)
            {       
            printf("Error Failed\n");       
            //fails here with error 6 invalid handle 
            }
        }



    // Cleanup
    SetupDiDestroyDeviceInfoList(hDevInfo);
    //
    system ("pause");
    //
    return 0;

}
EN

回答 1

Stack Overflow用户

发布于 2012-09-18 23:10:00

您对SetupDiGetClassDevs的调用是不正确的,因为设备信息设置它返回的元素,最终缺少SetupDiEnumDeviceInterfaces需要工作的设备接口列表。

请参阅 documentation on msdn的备注部分

若要返回支持任何类的设备接口的设备,请设置DIFCF_DEVICEINTERFACE标志、设置DIGCF_ALLCLASSES标志和将ClassGuid设置为NULL。该函数向设备信息集中添加表示这样的设备的设备信息元素,然后将包含设备支持的所有设备接口的设备接口列表添加到设备信息元素中。

因此,通过添加如下所示的SetupDiGetClassDevs标志来修正您的DIGCF_DEVICEINTERFACE调用:

代码语言:javascript
运行
复制
hDevInfo = SetupDiGetClassDevs(NULL,0,0, DIGCF_PRESENT | DIGCF_ALLCLASSES | DIGCF_DEVICEINTERFACE);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12485414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档