From: John Tsiombikas Date: Thu, 2 Jan 2020 11:09:33 +0000 (+0200) Subject: friendly names X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=rawdisktest;a=commitdiff_plain;h=d6c8a8e10f6f00b22cf04b5c64f83cf36a3d8d32 friendly names --- diff --git a/src/main.c b/src/main.c index ab6d6ae..c1da2d9 100644 --- a/src/main.c +++ b/src/main.c @@ -9,11 +9,14 @@ int main(int argc, char **argv) { - int ifidx; + int devidx, ifidx; HDEVINFO devset; + SP_DEVINFO_DATA devdata; SP_DEVICE_INTERFACE_DATA devif; SP_DEVICE_INTERFACE_DETAIL_DATA_A *devdetail; - DWORD detsz; + DWORD size; + DWORD regtype; + char devname[1024]; if((devset = SetupDiGetClassDevs(&GUID_DEVINTERFACE_DISK, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)) == INVALID_HANDLE_VALUE) { @@ -21,28 +24,47 @@ int main(int argc, char **argv) return 1; } - ifidx = 0; + devidx = 0; for(;;) { - memset(&devif, 0, sizeof devif); - devif.cbSize = sizeof devif; - if(!SetupDiEnumDeviceInterfaces(devset, 0, &GUID_DEVINTERFACE_DISK, ifidx, &devif)) { + memset(&devdata, 0, sizeof devdata); + devdata.cbSize = sizeof devdata; + if(!SetupDiEnumDeviceInfo(devset, devidx, &devdata)) { if(GetLastError() == ERROR_NO_MORE_ITEMS) break; - ifidx++; + devidx++; continue; } - SetupDiGetDeviceInterfaceDetail(devset, &devif, 0, 0, &detsz, 0); - if(!(devdetail = malloc(detsz))) { - fprintf(stderr, "failed to allocate device interface detail buffer (size: %lu)\n", (unsigned long)detsz); - return 1; + regtype = SPDRP_PHYSICAL_DEVICE_OBJECT_NAME; + SetupDiGetDeviceRegistryProperty(devset, &devdata, SPDRP_FRIENDLYNAME, + ®type, (unsigned char*)devname, sizeof devname, &size); + + printf("Device %d: %s\n", devidx, devname); + + ifidx = 0; + for(;;) { + memset(&devif, 0, sizeof devif); + devif.cbSize = sizeof devif; + if(!SetupDiEnumDeviceInterfaces(devset, &devdata, &GUID_DEVINTERFACE_DISK, ifidx, &devif)) { + if(GetLastError() == ERROR_NO_MORE_ITEMS) break; + ifidx++; + continue; + } + + SetupDiGetDeviceInterfaceDetail(devset, &devif, 0, 0, &size, 0); + if(!(devdetail = malloc(size))) { + fprintf(stderr, "failed to allocate device interface detail buffer (size: %lu)\n", (unsigned long)size); + return 1; + } + devdetail->cbSize = sizeof *devdetail; + SetupDiGetDeviceInterfaceDetail(devset, &devif, devdetail, size, 0, 0); + printf(" path: %s\n", devdetail->DevicePath); + free(devdetail); + + ifidx++; } - devdetail->cbSize = sizeof *devdetail; - SetupDiGetDeviceInterfaceDetail(devset, &devif, devdetail, detsz, 0, 0); - printf("device path: %s\n", devdetail->DevicePath); - free(devdetail); - ifidx++; + devidx++; + printf("found %d devices\n", devidx); } - printf("found %d devices\n", ifidx); return 0; }