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 devinfo;
\r
15 SP_DEVICE_INTERFACE_DATA devif;
\r
16 SP_DEVICE_INTERFACE_DETAIL_DATA_A *devdetail;
\r
19 if((devset = SetupDiGetClassDevs(&GUID_DEVINTERFACE_DISK, 0, 0,
\r
20 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)) == INVALID_HANDLE_VALUE) {
\r
21 fprintf(stderr, "failed to enumerate devices\n");
\r
27 memset(&devinfo, 0, sizeof devinfo);
\r
28 devinfo.cbSize = sizeof devinfo;
\r
29 if(!SetupDiEnumDeviceInfo(devset, devidx, &devinfo)) {
\r
30 if(GetLastError() == ERROR_NO_MORE_ITEMS) {
\r
31 printf("no such device: %d\n", devidx);
\r
38 printf("device %d:\n", devidx);
\r
41 memset(&devif, 0, sizeof devif);
\r
42 devif.cbSize = sizeof devif;
\r
43 if(!SetupDiEnumDeviceInterfaces(devset, &devinfo, &GUID_DEVINTERFACE_DISK, ifidx, &devif)) {
\r
44 if(GetLastError() == ERROR_NO_MORE_ITEMS) {
\r
45 printf("no such interface: %d\n", ifidx);
\r
52 SetupDiGetDeviceInterfaceDetail(devset, &devif, 0, 0, &detsz, 0);
\r
53 if(!(devdetail = malloc(detsz))) {
\r
54 fprintf(stderr, "failed to allocate device interface detail buffer (size: %lu)\n", (unsigned long)detsz);
\r
57 devdetail->cbSize = detsz;
\r
58 SetupDiGetDeviceInterfaceDetail(devset, &devif, devdetail, detsz, 0, 0);
\r
59 printf("device %d.%d path: %s\n", devidx, ifidx, devdetail->DevicePath);
\r
64 printf("found %d interfaces\n", ifidx);
\r
68 printf("found %d devices\n", devidx);
\r