{\r
int devidx, ifidx;\r
HDEVINFO devset;\r
- SP_DEVINFO_DATA devinfo;\r
+ SP_DEVINFO_DATA devdata;\r
SP_DEVICE_INTERFACE_DATA devif;\r
SP_DEVICE_INTERFACE_DETAIL_DATA_A *devdetail;\r
- DWORD detsz;\r
+ DWORD size;\r
+ DWORD regtype;\r
+ char devname[1024];\r
\r
if((devset = SetupDiGetClassDevs(&GUID_DEVINTERFACE_DISK, 0, 0,\r
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)) == INVALID_HANDLE_VALUE) {\r
\r
devidx = 0;\r
for(;;) {\r
- memset(&devinfo, 0, sizeof devinfo);\r
- devinfo.cbSize = sizeof devinfo;\r
- if(!SetupDiEnumDeviceInfo(devset, devidx, &devinfo)) {\r
- if(GetLastError() == ERROR_NO_MORE_ITEMS) {\r
- printf("no such device: %d\n", devidx);\r
- break;\r
- }\r
+ memset(&devdata, 0, sizeof devdata);\r
+ devdata.cbSize = sizeof devdata;\r
+ if(!SetupDiEnumDeviceInfo(devset, devidx, &devdata)) {\r
+ if(GetLastError() == ERROR_NO_MORE_ITEMS) break;\r
devidx++;\r
continue;\r
}\r
\r
- printf("device %d:\n", devidx);\r
+ regtype = SPDRP_PHYSICAL_DEVICE_OBJECT_NAME;\r
+ SetupDiGetDeviceRegistryProperty(devset, &devdata, SPDRP_FRIENDLYNAME,\r
+ ®type, (unsigned char*)devname, sizeof devname, &size);\r
+\r
+ printf("Device %d: %s\n", devidx, devname);\r
+\r
ifidx = 0;\r
for(;;) {\r
memset(&devif, 0, sizeof devif);\r
devif.cbSize = sizeof devif;\r
- if(!SetupDiEnumDeviceInterfaces(devset, &devinfo, &GUID_DEVINTERFACE_DISK, ifidx, &devif)) {\r
- if(GetLastError() == ERROR_NO_MORE_ITEMS) {\r
- printf("no such interface: %d\n", ifidx);\r
- break;\r
- }\r
+ if(!SetupDiEnumDeviceInterfaces(devset, &devdata, &GUID_DEVINTERFACE_DISK, ifidx, &devif)) {\r
+ if(GetLastError() == ERROR_NO_MORE_ITEMS) break;\r
ifidx++;\r
continue;\r
}\r
\r
- SetupDiGetDeviceInterfaceDetail(devset, &devif, 0, 0, &detsz, 0);\r
- if(!(devdetail = malloc(detsz))) {\r
- fprintf(stderr, "failed to allocate device interface detail buffer (size: %lu)\n", (unsigned long)detsz);\r
+ SetupDiGetDeviceInterfaceDetail(devset, &devif, 0, 0, &size, 0);\r
+ if(!(devdetail = malloc(size))) {\r
+ fprintf(stderr, "failed to allocate device interface detail buffer (size: %lu)\n", (unsigned long)size);\r
return 1;\r
}\r
- devdetail->cbSize = detsz;\r
- SetupDiGetDeviceInterfaceDetail(devset, &devif, devdetail, detsz, 0, 0);\r
- printf("device %d.%d path: %s\n", devidx, ifidx, devdetail->DevicePath);\r
+ devdetail->cbSize = sizeof *devdetail;\r
+ SetupDiGetDeviceInterfaceDetail(devset, &devif, devdetail, size, 0, 0);\r
+ printf(" path: %s\n", devdetail->DevicePath);\r
free(devdetail);\r
\r
ifidx++;\r
}\r
- printf("found %d interfaces\n", ifidx);\r
+\r
devidx++;\r
+ printf("found %d devices\n", devidx);\r
}\r
-\r
- printf("found %d devices\n", devidx);\r
return 0;\r
}\r