SetupDIEnum ...函数之间的区别

时间:2019-04-08 11:20:38

标签: c++ driver device winusb setupapi

我是Windows驱动程序的新手,目前正在使用SetupApi函数。我从我应该了解的同事那里获得了USB设备包装器库代码。但是,提出问题的时间确实很短,我已辞职以通过对代码进行逆向工程来帮助自己;)。

代码中有几个函数可以枚举USB设备,设备信息和设备接口。我对所有枚举感到困惑。

这些功能中的通用代码如下:

deviceInfo = SetupDiGetClassDevs(NULL,
        NULL, NULL,
        DIGCF_ALLCLASSES | DIGCF_DEVICEINTERFACE);

确定设备路径的函数使用:

SetupDiEnumDeviceInterfaces(deviceInfo,
            NULL,
            &DRIVER_GUID,
            memberIndex,
            &interfaceData);

SetupDiGetDeviceInterfaceDetail(deviceInfo,
            &interfaceData,
            NULL, 0,
            &requiredLength,
            NULL);

在while循环中。

获取驱动程序版本的功能使用:

SetupDiEnumDeviceInfo(devs, DeviceNo++, &devInfo)

SetupDiGetDeviceInfoListDetail(devs, &devInfoListDetail);

相反。

确定服务名称的第三个函数使用:

devs = SetupDiGetClassDevs(NULL, "USB", NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);

开头,然后:

SetupDiGetDeviceInfoListDetail(devs, &devInfoListDetail);

以及

SetupDiGetDeviceRegistryProperty(devs, &devInfo, SPDRP_HARDWAREID, &DataT, (PBYTE)hardwareID, sizeof(hardwareID), &dwSize);

我搜索了设置api文档,发现界面和设备信息之间存在差异。这听起来很合理,但我所缺少的是这些列表的示例以及它们之间的相互关系,以便我可以更具体地遵循通过这些列表的路径。 我的意思是,获取所有设备的列表,然后获取属于每个设备的所有接口的列表,然后获取这些接口中每个接口的驱动程序列表。这看起来应该像一棵树。但是,我的观点是从内而外的,我喜欢从奥西德的观点。

这就是我在所有这些枚举中迷失的意思。

有人在这里有一些链接或提示,以获取概述吗?

0 个答案:

没有答案