我是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文档,发现界面和设备信息之间存在差异。这听起来很合理,但我所缺少的是这些列表的示例以及它们之间的相互关系,以便我可以更具体地遵循通过这些列表的路径。 我的意思是,获取所有设备的列表,然后获取属于每个设备的所有接口的列表,然后获取这些接口中每个接口的驱动程序列表。这看起来应该像一棵树。但是,我的观点是从内而外的,我喜欢从奥西德的观点。
这就是我在所有这些枚举中迷失的意思。
有人在这里有一些链接或提示,以获取概述吗?