friendly names
[rawdisktest] / src / main.c
index 8f7b239..c1da2d9 100644 (file)
@@ -11,10 +11,12 @@ int main(int argc, char **argv)
 {\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
@@ -24,47 +26,45 @@ int main(int argc, char **argv)
 \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
+                               &regtype, (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