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

Tycool 2008-04-11 11:56:29
大虾帮帮忙,我的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());

}
...全文
506 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tycool 2008-04-11
  • 打赏
  • 举报
回复
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 ()

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧