Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <Windows.h>
- #include <SetupAPI.h>
- static int get_interface(HDEVINFO);
- static int get_detail(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_A, DWORD);
- static int get_instance(HDEVINFO, PSP_DEVINFO_DATA, PSTR, DWORD, PSP_DEVICE_INTERFACE_DETAIL_DATA_A);
- int main()
- {
- HDEVINFO devInfoSet = SetupDiGetClassDevsA(NULL, "USBSTOR", NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
- if (devInfoSet == INVALID_HANDLE_VALUE)
- {
- fprintf(stderr, "SetupDiGetClassDevsA: Error %lu\n", GetLastError());
- return 1;
- }
- int ret = get_interface(devInfoSet);
- SetupDiDestroyDeviceInfoList(devInfoSet);
- return ret;
- }
- int get_interface(HDEVINFO devInfoSet)
- {
- SP_DEVICE_INTERFACE_DATA devIface = { sizeof(SP_DEVICE_INTERFACE_DATA) };
- if (!SetupDiEnumDeviceInterfaces(devInfoSet, NULL, &GUID_DEVINTERFACE_DISK, 0, &devIface))
- {
- fprintf(stderr, "SetupDiEnumDeviceInterfaces: Error %lu\n", GetLastError());
- return 1;
- }
- DWORD sDevIfaceDetail;
- SetupDiGetDeviceInterfaceDetailA(devInfoSet, &devIface, NULL, 0, &sDevIfaceDetail, NULL);
- PSP_DEVICE_INTERFACE_DETAIL_DATA_A pDevIfaceDetail = malloc(sDevIfaceDetail);
- if (!pDevIfaceDetail)
- {
- fputs("malloc: Out of memory.\n", stderr);
- return 1;
- }
- pDevIfaceDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A);
- int ret = get_detail(devInfoSet, &devIface, pDevIfaceDetail, sDevIfaceDetail);
- free(pDevIfaceDetail);
- return ret;
- }
- int get_detail(HDEVINFO devInfoSet, PSP_DEVICE_INTERFACE_DATA pDevIface, PSP_DEVICE_INTERFACE_DETAIL_DATA_A pDevIfaceDetail, DWORD sDevIfaceDetail)
- {
- SP_DEVINFO_DATA devInfo = { sizeof(SP_DEVINFO_DATA) };
- if (!SetupDiGetDeviceInterfaceDetailA(devInfoSet, pDevIface, pDevIfaceDetail, sDevIfaceDetail, NULL, &devInfo))
- {
- fprintf(stderr, "SetupDiGetDeviceInterfaceDetailA: Error %lu\n", GetLastError());
- return 1;
- }
- DWORD sDevIfaceId;
- SetupDiGetDeviceInstanceIdA(devInfoSet, &devInfo, NULL, 0, &sDevIfaceId);
- PSTR pDevIfaceId = calloc(sDevIfaceId, sizeof(CHAR));
- if (!pDevIfaceId)
- {
- fputs("calloc: Out of memory.\n", stderr);
- return 1;
- }
- int ret = get_instance(devInfoSet, &devInfo, pDevIfaceId, sDevIfaceId, pDevIfaceDetail);
- free(pDevIfaceId);
- return ret;
- }
- int get_instance(HDEVINFO devInfoSet, PSP_DEVINFO_DATA pdevInfo, PSTR pDevIfaceId, DWORD sDevIfaceId, PSP_DEVICE_INTERFACE_DETAIL_DATA_A pDevIfaceDetail)
- {
- if (!SetupDiGetDeviceInstanceIdA(devInfoSet, pdevInfo, pDevIfaceId, sDevIfaceId, NULL))
- {
- fprintf(stderr, "SetupDiGetDeviceInstanceIdA: Error %lu\n", GetLastError());
- return 1;
- }
- printf("Device instance id: %s\nDevice path: %s\n", pDevIfaceId, pDevIfaceDetail->DevicePath);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement