This test works on my PC (Windows 10 21H1, VS 2022) =>
SP_DEVINFO_DATA did;
DWORD nIndex = 0;
HDEVINFO hDI = SetupDiGetClassDevs(&GUID_DEVINTERFACE_USB_DEVICE, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
LPTSTR pwszInstanceId = (LPTSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (MAX_DEVICE_ID_LEN * sizeof(WCHAR)));
if ((NULL != pwszInstanceId) && (INVALID_HANDLE_VALUE != hDI))
{
while (did.cbSize = sizeof(SP_DEVINFO_DATA), SetupDiEnumDeviceInfo(hDI, nIndex, &did))
{
bool bSuccess = SetupDiGetDeviceInstanceId(hDI, &did, pwszInstanceId, MAX_DEVICE_ID_LEN, NULL);
if (bSuccess)
{
// Code...
}
nIndex++;
}
SetupDiDestroyDeviceInfoList(hDI);
}
if (pwszInstanceId)
HeapFree(GetProcessHeap(), 0, pwszInstanceId);