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_DEVICE_INTERFACE_DATA devif;
\r
15 SP_DEVICE_INTERFACE_DETAIL_DATA_A *devdetail;
\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
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
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
39 devdetail->cbSize = sizeof *devdetail;
\r
40 SetupDiGetDeviceInterfaceDetail(devset, &devif, devdetail, detsz, 0, 0);
\r
41 printf("device path: %s\n", devdetail->DevicePath);
\r
46 printf("found %d devices\n", ifidx);
\r