5477|2

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

USB Bulk设备 DeviceIoControl用自己的VendorCmd怎么总是返回错误6 (Invalid Handler)? [复制链接]

大虾帮帮忙,我的CreateFile有错么??? (人家怎么有直接打开"\\\\.\\IOCTL"??? 这是什么设备?)
为什么DeviceIoControl总是说Handle不对???
而且这个DeviceIoControl没看到在对应的WDM驱动中走到 BulkUsb_DispatchDevCtrl()处理函数,是在上层就被退回来了?

        hFile = CreateFile(        m_DeviceName,//"\\?\usb#vid_10c4&pid_0003#5&1d4952dc&0&2#{37538c66-9584-42d3-9632-ebad0a230d13}"
                                                GENERIC_WRITE | GENERIC_READ,
                                                FILE_SHARE_WRITE | FILE_SHARE_READ,
                                                NULL,
                                                OPEN_EXISTING,
                                                0,
                                                NULL);




#define MY_USB_VENDOR_IOCTL_FUNC_BASE        0x0800
#define IOCTL_MY_USB_VENDOR_IOCTL_CMD1 CTL_CODE(FILE_DEVICE_UNKNOWN,     \
                                                     MY_USB_VENDOR_IOCTL_FUNC_BASE+1,     \
                                                     METHOD_BUFFERED,         \
                                                     FILE_ANY_ACCESS)


char cArrTmp[4/*64*/] = {0x0};
int length, numBytesReceived;


BOOL bResult = DeviceIoControl (                // Perform the Vendor Specific Command IOCTL.
                                                   cyHandle,
                                                   IOCTL_MY_USB_VENDOR_IOCTL_CMD1,
                                                   NULL,
                                                   0,
                                                   &cArrTmp,
                                                   sizeof(cArrTmp),//length,
                                                   (LPDWORD) &numBytesReceived,
                                                   NULL );

                                if (bResult == TRUE)
                                {
                                        status = F32x_SUCCESS;//return SUCCESS;
                                }
                                else
                                {
                                        status = F32x_INVALID_HANDLE;//return FAILURE;
                                        //#define ERROR_INVALID_HANDLE             6L //winerror.h
                                          strTmp.Format("Error %d in IOCTL_INTUSB_GET_CONFIG_DESCRIPTOR call\n", //Error 6 !!!!
                                          GetLastError());

                                }

最新回复

*cyHandle, //要用 *cyHandle, 而不是 cyHandle !!!! 这种编程错误无法用规范防止,只能是通过编译和调试加细心了.  详情 回复 发表于 2013-9-2 15:50
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
hahaha
打死你也猜不出来

我找到原因了,Handle的指针传错了!!!
大家来谈谈编程规范吧,回的有分数  :-)


F32x_Open(DWORD dwDevice, HANDLE* cyHandle)
{
   *cyHandle = sgCUsbIF.Open(dwDevice);
   if (*cyHandle != INVALID_HANDLE_VALUE)
   {
      DeviceIoControl ( // Perform the Vendor Specific Command IOCTL.
        *cyHandle, //要用 *cyHandle, 而不是 cyHandle !!!!
...

   }
}



===============================================================
F320驱动中 (bulkdev.c)
NTSTATUS
BulkUsb_DispatchDevCtrl(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
...
        //USB vendor command
    case IOCTL_MY_USB_VENDOR_IOCTL_CMD1:
        KdPrint( ("IOCTL_ATRUA_USB_VENDOR_IOCTL_CMD1==="));
        UsbBuildVendorRequest(
                        urb,
                        URB_FUNCTION_VENDOR_ENDPOINT,
                        (USHORT) sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST),

        ntStatus = STATUS_SUCCESS;//BulkUsb_ResetDevice(DeviceObject);



==================================
F320 Firmware中处理:
void Endpoint0 ()
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
*cyHandle, //要用 *cyHandle, 而不是 cyHandle !!!!
这种编程错误无法用规范防止,只能是通过编译和调试加细心了.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表