Windows下用VS怎么枚举系统下的所有HID设备?

USB中文网 2021-07-07 23:32:41 编辑

Windows下提供了一套SetupApi函数来进行设备的管理。
Windows为不同的设备类型提供了一不同的类GUID,我们可以先获取HID设备的GUID,然后再根据GUID枚举系统中的所有HID设备,然后再使用SetupDiGetDeviceRegistryProperty函数获取设备的硬件ID.

#include <windows.h>
#include <winioctl.h>
#include <setupapi.h>
#include <initguid.h>
#include <stdio.h>
#include <hidsdi.h>
#include <tchar.h>

void main()
{
    GUID hidGuid;
    ::HidD_GetHidGuid((LPGUID)&hidGuid);

    HDEVINFO hDevInfo = SetupDiGetClassDevs(&hidGuid, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
    if (hDevInfo == INVALID_HANDLE_VALUE)
    {
        return;
    }

    SP_DEVINFO_DATA DeviceInfoData;
    for (int iIndex = 0;; iIndex++)
    {
        DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
        if (!SetupDiEnumDeviceInfo(hDevInfo, iIndex, &DeviceInfoData))
        {
            break;
        }

        TCHAR szHardWareID[512] = { 0 };
        if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_HARDWAREID,
            NULL, (PBYTE)szHardWareID, sizeof(szHardWareID), NULL))
        {
            continue;
        }
        _tprintf(TEXT("%d %s\n"), iIndex, szHardWareID);
    }
}

如在本人电脑中运行效果如下:

0 *WINDRVR1221
1 HID\INTC816&Col10
2 ACPI\VEN_PNP&DEV_0B00
3 PCI\VEN_8086&DEV_34EF&SUBSYS_00000000&REV_30
4 SCSI\DiskWD______My_Passport_25F31012
5 ACPI\VEN_PNP&DEV_0C02
6 ACPI\VEN_PNP&DEV_0C02
7 ACPI\VEN_PNP&DEV_0C02
8 ACPI\VEN_PNP&DEV_0C09
9 INTELAUDIO\FUNC_01&VEN_8086&DEV_280F&SUBSYS_80860101&REV_1000
10 ACPI\VEN_PNP&DEV_0000
11 ACPI\VEN_PNP&DEV_0C0A
12 ACPI\VEN_PNP&DEV_0C0B
13 ACPI\VEN_PNP&DEV_0C0B
14 ACPI\VEN_PNP&DEV_0C0B
15 ACPI\VEN_PNP&DEV_0C0B
16 ACPI\VEN_PNP&DEV_0C0B
17 USB\VID_12D1&PID_3A07&REV_0024&MI_00
18 ACPI\VEN_ACPI&DEV_000C
19 PCI\VEN_8086&DEV_34ED&SUBSYS_097B1028&REV_30
20 MMDEVAPI\AudioEndpoints
21 PRINTENUM\LocalPrintQueue
22 SWC\100.7870_VEN8086_IGCC
23 USB\VID_0BDA&PID_8153&REV_3000
24 ROOT\VOLMGR
25 USB\VID_05E3&PID_0610&REV_0655
26 ACPI\VEN_INT&DEV_3F0D
27 ACPI\VEN_INTC&DEV_5000
28 ACPI\VEN_INT&DEV_3400
29 ms_pppoeminiport
30 HID\VEN_DELL&DEV_097B&Col01
31 PCI\VEN_8086&DEV_34E9&SUBSYS_097B1028&REV_30
32 MMDEVAPI\AudioEndpoints
33 ROOT\BasicDisplay
34 ACPI\VEN_PNP&DEV_0C0E
35 ButtonConverter\ConvertedDevice
36 PCI\VEN_8086&DEV_8A52&SUBSYS_097B1028&REV_07
37 ACPI\VEN_INT&DEV_3403
38 PRINTENUM\{0f4130dd-19c7-7ab6-99a1-980f03b2ee4e}
39 MMDEVAPI\AudioEndpoints
40 *msloop
41 ACPI\ThermalZone
42 UMB\UMBUS
43 PCI\VEN_8086&DEV_34BC&SUBSYS_097B1028&REV_30
44 PRINTENUM\{3ee39114-30b4-45a4-a109-19d4a40fcc22}
46 ACPI\VEN_PNP&DEV_0C14
47 USB\VID_1058&PID_25F3&REV_1012
48 *VMnetAdapter1
49 *VMnetAdapter8
50 ACPI\VEN_DLLK&DEV_097B
51 ACPI\VEN_DELL&DEV_097B
52 ms_pptpminiport
53 PCI\VEN_8086&DEV_34B0&SUBSYS_097B1028&REV_30
54 USB\VID_12D1&PID_3A07&REV_0024
55 ROOT\VID
56 ACPI\VEN_INT&DEV_3403
57 UEFI\RES_{43df793a-4a71-5ca7-bf7b-61bdc49455e6}&REV_10D00
58 ACPI\VEN_PNP&DEV_0103
59 ms_agilevpnminiport
60 ROOT\CompositeBus
61 ROOT\vdrvroot
62 PCI\VEN_8086&DEV_8A12&SUBSYS_097B1028&REV_03
63 ACPI\VEN_ACPI&DEV_0003
64 Root\Spaceport
65 USB\VID_0C45&PID_671E&REV_8502&MI_00
66 ACPI\GenuineIntel_-_Intel64_Family_6_Model_126
67 ACPI\GenuineIntel_-_Intel64_Family_6_Model_126
68 ACPI\GenuineIntel_-_Intel64_Family_6_Model_126
69 ACPI\GenuineIntel_-_Intel64_Family_6_Model_126
70 ACPI\GenuineIntel_-_Intel64_Family_6_Model_126
71 ACPI\GenuineIntel_-_Intel64_Family_6_Model_126
72 ACPI\GenuineIntel_-_Intel64_Family_6_Model_126
73 ACPI\GenuineIntel_-_Intel64_Family_6_Model_126
74 SCSI\DiskNVMe____BC511_NVMe_SK_hy1101
75 root\kdnic
76 STORAGE\Volume
77 STORAGE\VolumeSnapshot
78 HID\VEN_DELL&DEV_097B&Col02
79 PCI\VEN_8086&DEV_34A4&SUBSYS_097B1028&REV_30
80 STORAGE\Volume
81 HID\VID_093A&PID_2510&REV_0100
82 HID\INTC816&Col0F
83 ACPI\VEN_INT&DEV_3403
84 MMDEVAPI\AudioEndpoints
85 MMDEVAPI\AudioEndpoints
86 ACPI\VEN_PNP&DEV_0C0D
87 SWC\PROVIDER_INTEL_COMPONENT_ICLSCLIENT
88 ACPI\VEN_INT&DEV_3455
89 SWC\100.7870_VEN8086_GFXUI_Yangra
90 ACPI\VEN_PNP&DEV_0C02
91 PCI\VEN_8086&DEV_3482&SUBSYS_097B1028&REV_30
92 HID\INTC816&Col0E
93 STORAGE\Volume
94 SWC\VEN_10EC&AID_0001
95 HID\INTC816&Col0D
96 HID\INTC816&Col0C
97 SWC\3C4852D6-D47B-4F46-B05E-B5EDC1AA440E
98 HID\INTC816&Col0B
100 MMDEVAPI\AudioEndpoints
101 root\umbus
102 ROOT\CAD
103 HID\INTC816&Col0A
104 SWC\5DCEB103-DD64-403C-A17C-94FC5F917A9C
105 {5d624f94-8850-40c3-a3fa-a4fd2080baf3}\vwifimp_wfd
106 {5d624f94-8850-40c3-a3fa-a4fd2080baf3}\vwifimp_wfd
107 ACPI\VEN_PNP&DEV_0C14
108 STORAGE\Volume
109 ACPI\VEN_PNP&DEV_0C14
110 ACPI\VEN_PNP&DEV_0C14
112 PCI\VEN_8086&DEV_34E0&SUBSYS_097B1028&REV_30
113 PCI\VEN_8086&DEV_282A&SUBSYS_097B1028&REV_30
115 MMDEVAPI\AudioEndpoints
116 STORAGE\Volume
117 acpiapic
118 PCI\VEN_8086&DEV_8A03&SUBSYS_097B1028&REV_03
119 ms_ndiswanbh
120 ms_ndiswanip
121 ACPI\VEN_PNP&DEV_0C14
122 ACPI\VEN_PNP&DEV_0A08
123 PCI\VEN_8086&DEV_34E8&SUBSYS_097B1028&REV_30
124 HID\VEN_DELL&DEV_097B&Col03
125 SWC\VEN_10EC&SID_0001
126 ACPI\VEN_PNP&DEV_0C0C
127 ACPI_HAL\PNP0C08
129 ROOT\BasicRender
130 ms_sstpminiport
131 MONITOR\BOE082E
132 PRINTENUM\LocalPrintQueue
133 ACPI_HAL\UEFI
134 SCSI\DiskST1000LM035-1RK172______SBM3
135 ACPI\VEN_PNP&DEV_0100
136 HID\VID_12D1&PID_3A07&REV_0024&MI_03
137 HID\INTC816&Col09
138 STORAGE\Volume
139 ACPI\FixedButton
140 HID\INTC816&Col08
141 HID\INTC816&Col07
142 STORAGE\Volume
143 INTELAUDIO\FUNC_01&VEN_10EC&DEV_0236&SUBSYS_1028097B&REV_1000
144 HID\INTC816&Col06
145 PCI\VEN_8086&DEV_34C8&SUBSYS_097B1028&REV_30
146 PCI\VEN_10EC&DEV_8136&SUBSYS_097B1028&REV_07
147 ACPI\VEN_PNP&DEV_0C14
148 HID\INTC816&Col05
149 ACPI\VEN_INT&DEV_33A1
150 ROOT\VMWVMCIHOSTDEV
151 ACPI\VEN_DLL&DEV_097B
152 PCI\VEN_8086&DEV_34A3&SUBSYS_097B1028&REV_30
153 STORAGE\Volume
154 HID\INTC816&Col04
155 ACPI\VEN_PNP&DEV_0C02
156 SCSI\EnclosureWD______SES_Device______1012
157 USB\VID_0955&PID_9000
158 ROOT\NVVHCI
159 HID\VEN_DELL&DEV_097B&Col04
160 STORAGE\Volume
161 HID\INTC816&Col03
162 SWC\VID8086&SW_RstShellExtensions
163 USB\ROOT_HUB30&VID8086&PID34ED&REV0030
165 ACPI\VEN_INT&DEV_33D5
166 HID\INTC816&Col02
167 HID\INTC816&Col01
168 PCI\VEN_168C&DEV_0042&SUBSYS_18101028&REV_31
169 INTELAUDIO\DSP_CTLR_DEV_34C8&VEN_8086&DEV_0222&SUBSYS_097B1028&REV_0030
170 SWC\PROVIDER_INTEL_COMPONENT_ICLSCLIENT
171 PCI\VEN_8086&DEV_34C5&SUBSYS_097B1028&REV_30
172 ROOT\NdisVirtualBus
173 HID\ConvertedDevice&Col03
175 HID\ConvertedDevice&Col02
176 HID\ConvertedDevice&Col01
177 SWC\VEN_10EC&ASIO_ID_0001
178 PRINTENUM\{084f01fa-e634-4d77-83ee-074817c03581}
179 USB\VID_0C45&PID_671E&REV_8502
180 PCI\VEN_8086&DEV_34B1&SUBSYS_097B1028&REV_30
181 USB\VID_05E3&PID_0626&REV_0655
182 SWC\3C4852D6-D47B-4F46-B05E-B5EDC1AA440E
183 PCI\VEN_10DE&DEV_1D11&SUBSYS_097B1028&REV_A1
184 ROOT\mssmbios
185 ACPI\VEN_INT&DEV_340E
186 USB\VID_093A&PID_2510&REV_0100
187 ACPI\VEN_PNP&DEV_0C14
188 APO\VEN_WAVES&AID_MA8MV5
189 PRINTENUM\microsoftmicrosoft_s7d14
190 ROOT\SWENUM
191 *ttechusbdhcDevice
192 ROOT\RDPBUS
193 HID\INTC816&Col12
194 ms_ndiswanipv6
195 SWC\5DCEB103-DD64-403C-A17C-94FC5F917A9C
196 VAud_WDM
197 *DtenVDualA
198 STORAGE\Volume
199 HID\INTC816&Col11
200 USB\VID_0CF3&PID_E009&REV_0001
201 ms_l2tpminiport
202 USB\VID_12D1&PID_3A07&REV_0024&MI_03