写入HID文件时出现INVALID_FUNCTION错误

时间:2017-09-22 19:28:37

标签: c++ hid

我正在编写一个程序来将数据发送到HID设备。我从Microsoft的文档中跟随以下页面:Finding and Opening a HID Collection并且我成功地获得了文件句柄,但是当我尝试使用WriteFile编写时,我收到INVALID_FUNCTION错误(1)。我通过Hyperterminal将相同的数据发送到设备并且它有效,所以我确信我发送的信息是正确的。 这是我的代码:

HANDLE m_hCommPort;
GUID guid = GUID_DEVINTERFACE_USB_DEVICE;
HDEVINFO hinfo;
DWORD index = 0;
SP_DEVICE_INTERFACE_DATA deviceInterfaceData;
SP_DEVINFO_DATA deviceInfoData;
BOOL result;
PSP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData = NULL;
DWORD requiredSize;
DWORD deviceIndex = 0;

hinfo = SetupDiGetClassDevs(&guid, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);

deviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
result = SetupDiEnumDeviceInterfaces(hinfo, NULL, &guid, deviceIndex, &deviceInterfaceData);
while (result == TRUE) {
    deviceInfoData.cbSize = sizeof(deviceInfoData);
    SetupDiGetDeviceInterfaceDetail(hinfo, &deviceInterfaceData, NULL, 0, &requiredSize, &deviceInfoData);
    deviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredSize);
    deviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
    SetupDiGetDeviceInterfaceDetail(hinfo, &deviceInterfaceData, deviceInterfaceDetailData, requiredSize, NULL, &deviceInfoData);
    Trace(TEXT(deviceInterfaceDetailData->DevicePath));
    if (_tcsstr(deviceInterfaceDetailData->DevicePath, "vid_0c2e&pid_0be7")) {
        Trace(TEXT(deviceInterfaceDetailData->DevicePath));
        break;
    }
    result = SetupDiEnumDeviceInterfaces(hinfo, NULL, &guid, ++deviceIndex, &deviceInterfaceData);
}
if (result == FALSE) {
    ErrorExit("SetupDiEnumDeviceInterfaces ");
}
else if(deviceInterfaceDetailData != NULL){
    m_hCommPort = CreateFile(deviceInterfaceDetailData->DevicePath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
    if (m_hCommPort == INVALID_HANDLE_VALUE) {
        ErrorExit("CreateFile");
    }
    else {
        DWORD bytesWritten;
        char scanCommand[] = { 22,77,13,'I','M','G','S','N','P','1','B' };
        DWORD size = sizeof(scanCommand);
        BOOL fileWritten = WriteFile(m_hCommPort, scanCommand, size, &bytesWritten, NULL);
        if (fileWritten == TRUE) {
            Trace(TEXT("Wrote %d files to device"), bytesWritten);
        }
        else {
            ErrorExit("Error writing to file");
        }
    }
}

有人可以帮我理解为什么我会收到这个错误吗?

0 个答案:

没有答案