getting the path correctly now
[rawdisktest] / src / main.c
1 #include <stdio.h>\r
2 #include <stdlib.h>\r
3 #include <string.h>\r
4 #include <windows.h>\r
5 #include <setupapi.h>\r
6 #include <devguid.h>\r
7 #include <ntddstor.h>\r
8 #include <winioctl.h>\r
9 \r
10 int main(int argc, char **argv)\r
11 {\r
12         int ifidx;\r
13         HDEVINFO devset;\r
14         SP_DEVICE_INTERFACE_DATA devif;\r
15         SP_DEVICE_INTERFACE_DETAIL_DATA_A *devdetail;\r
16         DWORD detsz;\r
17 \r
18         if((devset = SetupDiGetClassDevs(&GUID_DEVINTERFACE_DISK, 0, 0,\r
19                                         DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)) == INVALID_HANDLE_VALUE) {\r
20                 fprintf(stderr, "failed to enumerate devices\n");\r
21                 return 1;\r
22         }\r
23 \r
24         ifidx = 0;\r
25         for(;;) {\r
26                 memset(&devif, 0, sizeof devif);\r
27                 devif.cbSize = sizeof devif;\r
28                 if(!SetupDiEnumDeviceInterfaces(devset, 0, &GUID_DEVINTERFACE_DISK, ifidx, &devif)) {\r
29                         if(GetLastError() == ERROR_NO_MORE_ITEMS) break;\r
30                         ifidx++;\r
31                         continue;\r
32                 }\r
33 \r
34                 SetupDiGetDeviceInterfaceDetail(devset, &devif, 0, 0, &detsz, 0);\r
35                 if(!(devdetail = malloc(detsz))) {\r
36                         fprintf(stderr, "failed to allocate device interface detail buffer (size: %lu)\n", (unsigned long)detsz);\r
37                         return 1;\r
38                 }\r
39                 devdetail->cbSize = sizeof *devdetail;\r
40                 SetupDiGetDeviceInterfaceDetail(devset, &devif, devdetail, detsz, 0, 0);\r
41                 printf("device path: %s\n", devdetail->DevicePath);\r
42                 free(devdetail);\r
43 \r
44                 ifidx++;\r
45         }\r
46         printf("found %d devices\n", ifidx);\r
47         return 0;\r
48 }\r