5 #include <setupapi.h>
\r
7 #include <ntddstor.h>
\r
8 #include <winioctl.h>
\r
10 int main(int argc, char **argv)
\r
14 SP_DEVINFO_DATA devdata;
\r
15 SP_DEVICE_INTERFACE_DATA devif;
\r
16 SP_DEVICE_INTERFACE_DETAIL_DATA_A *devdetail;
\r
21 if((devset = SetupDiGetClassDevs(&GUID_DEVINTERFACE_DISK, 0, 0,
\r
22 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)) == INVALID_HANDLE_VALUE) {
\r
23 fprintf(stderr, "failed to enumerate devices\n");
\r
29 memset(&devdata, 0, sizeof devdata);
\r
30 devdata.cbSize = sizeof devdata;
\r
31 if(!SetupDiEnumDeviceInfo(devset, devidx, &devdata)) {
\r
32 if(GetLastError() == ERROR_NO_MORE_ITEMS) break;
\r
37 regtype = SPDRP_PHYSICAL_DEVICE_OBJECT_NAME;
\r
38 SetupDiGetDeviceRegistryProperty(devset, &devdata, SPDRP_FRIENDLYNAME,
\r
39 ®type, (unsigned char*)devname, sizeof devname, &size);
\r
41 printf("Device %d: %s\n", devidx, devname);
\r
45 memset(&devif, 0, sizeof devif);
\r
46 devif.cbSize = sizeof devif;
\r
47 if(!SetupDiEnumDeviceInterfaces(devset, &devdata, &GUID_DEVINTERFACE_DISK, ifidx, &devif)) {
\r
48 if(GetLastError() == ERROR_NO_MORE_ITEMS) break;
\r
53 SetupDiGetDeviceInterfaceDetail(devset, &devif, 0, 0, &size, 0);
\r
54 if(!(devdetail = malloc(size))) {
\r
55 fprintf(stderr, "failed to allocate device interface detail buffer (size: %lu)\n", (unsigned long)size);
\r
58 devdetail->cbSize = sizeof *devdetail;
\r
59 SetupDiGetDeviceInterfaceDetail(devset, &devif, devdetail, size, 0, 0);
\r
60 printf(" path: %s\n", devdetail->DevicePath);
\r
67 printf("found %d devices\n", devidx);
\r