Windows API - IOCTL_CHANGER_GET_PRODUCT_DATA始终返回ERROR_INVALID_PARAMETER

时间:2017-02-10 21:29:25

标签: c windows winapi deviceiocontrol

我是通信库的作者,需要能够通过libusb和与我们的案例相对应的本机驱动程序(CESG502,CASIO制造)与串行设备和USB设备进行通信。串行和libusb通信都是管理的,我现在想要集成使用CESG502(为我们想要的驱动程序)。

主要问题来自这个驱动程序:而不是以与串行驱动程序相同的方式管理缓冲(如果接收到更多数据,它将被存储直到用户询问它),它希望开发人员提供比数据更大的缓冲区收到了。这导致ReadFile的两个不兼容的用法,其中我只需要输入我想要实际接收的字节数(串行,否则它只等待其余的永远不会到来)或缓冲区的大小( CESG502;如果我不这样做,驱动程序将返回ERROR_GEN_FAILURE)。

驱动程序是专有的,所以我无法纠正它。由于我的库的设计,我需要确定驱动程序是否是CESG502,以便在大多数情况下工作库可以工作。我查看并找到了IOCTL_CHANGER_GET_PRODUCT_DATA,看起来可能会带来我正在寻找的信息。所以我尝试使用它here

/* get product data */
CHANGER_PRODUCT_DATA ProductData; DWORD ReturnedBytes = 0;
DWORD wsuccess = DeviceIoControl(fhandle, IOCTL_CHANGER_GET_PRODUCT_DATA,
    NULL, 0, &ProductData, sizeof(CHANGER_PRODUCT_DATA),
    &ReturnedBytes, 0);
if (wsuccess) logr_info("SUCCESS!");
else logr_info("Error #0x%08lx occurred", GetLastError());

不幸的是,我不断收到0x57(ERROR_INVALID_PARAMETER)错误,这也发生在串行设备上。我正在关注页面所说的内容,我已经尝试了很多东西(将ReturnedBytes设置为sizeof(CHANGER_PRODUCT_DATA),初始化ProductData,无论如何都要阅读数据,...)我找到了哪里这个错误来自......

如果您知道如何解决此问题,请提前致谢:)

0 个答案:

没有答案