From e38e20db08ec71b924a3c7cf1b6b432a3dc729e0 Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Thu, 2 Jan 2020 12:55:05 +0200 Subject: [PATCH] getting the path correctly now --- src/main.c | 58 ++++++++++++++++++---------------------------------------- 1 file changed, 18 insertions(+), 40 deletions(-) diff --git a/src/main.c b/src/main.c index 8f7b239..ab6d6ae 100644 --- a/src/main.c +++ b/src/main.c @@ -9,9 +9,8 @@ int main(int argc, char **argv) { - int devidx, ifidx; + int ifidx; HDEVINFO devset; - SP_DEVINFO_DATA devinfo; SP_DEVICE_INTERFACE_DATA devif; SP_DEVICE_INTERFACE_DETAIL_DATA_A *devdetail; DWORD detsz; @@ -22,49 +21,28 @@ int main(int argc, char **argv) return 1; } - devidx = 0; + ifidx = 0; for(;;) { - memset(&devinfo, 0, sizeof devinfo); - devinfo.cbSize = sizeof devinfo; - if(!SetupDiEnumDeviceInfo(devset, devidx, &devinfo)) { - if(GetLastError() == ERROR_NO_MORE_ITEMS) { - printf("no such device: %d\n", devidx); - break; - } - devidx++; + memset(&devif, 0, sizeof devif); + devif.cbSize = sizeof devif; + if(!SetupDiEnumDeviceInterfaces(devset, 0, &GUID_DEVINTERFACE_DISK, ifidx, &devif)) { + if(GetLastError() == ERROR_NO_MORE_ITEMS) break; + ifidx++; continue; } - printf("device %d:\n", devidx); - ifidx = 0; - for(;;) { - memset(&devif, 0, sizeof devif); - devif.cbSize = sizeof devif; - if(!SetupDiEnumDeviceInterfaces(devset, &devinfo, &GUID_DEVINTERFACE_DISK, ifidx, &devif)) { - if(GetLastError() == ERROR_NO_MORE_ITEMS) { - printf("no such interface: %d\n", ifidx); - break; - } - ifidx++; - 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; - } - devdetail->cbSize = detsz; - SetupDiGetDeviceInterfaceDetail(devset, &devif, devdetail, detsz, 0, 0); - printf("device %d.%d path: %s\n", devidx, ifidx, devdetail->DevicePath); - free(devdetail); - - ifidx++; + 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; } - printf("found %d interfaces\n", ifidx); - devidx++; - } + devdetail->cbSize = sizeof *devdetail; + SetupDiGetDeviceInterfaceDetail(devset, &devif, devdetail, detsz, 0, 0); + printf("device path: %s\n", devdetail->DevicePath); + free(devdetail); - printf("found %d devices\n", devidx); + ifidx++; + } + printf("found %d devices\n", ifidx); return 0; } -- 1.7.10.4