Send IOCTL to Windows device driver - CreateFile fails Send IOCTL to Windows device driver - CreateFile fails windows windows

Send IOCTL to Windows device driver - CreateFile fails


Try it my way. I'm using Setup API to enumerate all USB active devices in the system and get paths. That way you can find out whether it's the path or other arguments that CreateFile doesn't like.

I'll add some comments a bit later, if anyone's interested.

HDEVINFO hDevInfo = SetupDiGetClassDevs( &_DEVINTERFACE_USB_DEVICE, 0, 0, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);    if(hDevInfo == INVALID_HANDLE_VALUE)    {        return ERR_FAIL;    }    std::vector<SP_INTERFACE_DEVICE_DATA> interfaces;    for (DWORD i = 0; true; ++i)    {        SP_DEVINFO_DATA devInfo;        devInfo.cbSize = sizeof(SP_DEVINFO_DATA);        BOOL succ = SetupDiEnumDeviceInfo(hDevInfo, i, &devInfo);        if (GetLastError() == ERROR_NO_MORE_ITEMS)            break;        if (!succ) continue;        SP_INTERFACE_DEVICE_DATA ifInfo;        ifInfo.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);        if (TRUE != SetupDiEnumDeviceInterfaces(hDevInfo, &devInfo,  &(_DEVINTERFACE_USB_DEVICE), 0, &ifInfo))        {            if (GetLastError() != ERROR_NO_MORE_ITEMS)                break;        }        interfaces.push_back(ifInfo);    }    std::vector<SP_INTERFACE_DEVICE_DETAIL_DATA*> devicePaths;    for (size_t i = 0; i < interfaces.size(); ++i)    {        DWORD requiredSize = 0;        SetupDiGetDeviceInterfaceDetail(hDevInfo, &(interfaces.at(i)), NULL, NULL, &requiredSize, NULL);        SP_INTERFACE_DEVICE_DETAIL_DATA* data = (SP_INTERFACE_DEVICE_DETAIL_DATA*) malloc(requiredSize);        assert (data);        data->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);        if (!SetupDiGetDeviceInterfaceDetail(hDevInfo, &(interfaces.at(i)), data, requiredSize, NULL, NULL))        {            continue;        }        devicePaths.push_back(data);    }


Just try with CreateFile(L"\\\\.\\{GUID}",etc...