USB Bulk设备 DeviceIoControl用自己的VendorCmd怎么总是返回错误6 (Invalid Handler)?
为什么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());
}
相关推荐
基于VB的USB HID设备通信程序设计与实战(含VID/PID配置)
HIDP_CAPS结构用于存储 HID 设备的功能信息,如输入/输出报告长度、支持的 Usage Page 等。其 C 定义如下:// ...省略其余字段在 VB6 中等价定义为:End Type使用示例:Debug.Print "输入报告长度: " & caps.InputReportByteLengthDebug.Print "输出报告长度: " & caps.OutputReportByteLengthEnd If⚠️ 注意:是中的函数,需额外声明。
易语言实现USB设备控制完整源码解析与实战
所有USB描述符均以二进制格式传输,其首字节为长度字段,次字节为描述符类型,后续为具体内容。以下是标准设备描述符的C语言定义(便于理解底层结构):// 描述符长度 (通常为18)// 类型: 0x01 表示设备描述符// USB 协议版本 (例: 0x0200 = USB 2.0)// 设备大类 (0=定制, 0xFF=厂商专用)// 子类// 协议代码// EP0 最大包大小// 厂商ID (VID)// 产品ID (PID)// 设备版本号// 制造商字符串索引。
C# USB通信项目实战:数据发送与接收
USB设备枚举是指将USB设备加入到系统的设备列表中的过程。这包括识别设备的类型、制造商信息、设备序列号等,并创建一个设备接口供操作系统或其他软件使用。枚举过程一般分为以下几个步骤:识别:操作系统首先通过USB总线上的信号识别新连接的USB设备。分配地址:为设备分配一个唯一的地址。下载设备描述符:操作系统通过控制传输向设备请求设备描述符,并获取设备的能力。选择配置:操作系统根据设备描述符中的信息选择一个合适的配置。设置接口:操作系统请求并下载选定配置的接口描述符。
C#原生USB HID通信骨架:Windows API手撸DeviceIoControl实现
USB HID是一种广泛应用于嵌入式设备与PC交互的标准化人机接口协议,其核心在于报告描述符解析、Report ID管理及Windows HID驱动栈的底层行为理解。基于.NET原生实现的HID通信需深入掌握SetupDi系列API、DeviceIoControl控制码调用、OVERLAPPED异步I/O模型以及二进制Report Descriptor手动解析等关键技术。该方案规避了HidLibrary等第三方库的黑盒缺陷和UWP API的沙箱限制,提供跨.NET 6+平台兼容、热插拔稳定、带日志追踪与单元
VC++实现USB通信开发:从Windows API到设备读写实战
在桌面应用开发中,与外部硬件进行数据交互是常见需求,USB通信是实现这一目标的核心技术之一。其原理基于主机与设备之间的标准协议,通过端点进行数据传输,包括控制、批量、中断和同步四种类型。掌握USB通信技术对于开发工业控制、数据采集等上位机软件具有重要价值,能实现对硬件设备的精细控制与高效数据交换。在Windows平台,开发者可通过系统API直接与USB驱动交互,这涉及设备枚举、驱动模型(如WinUSB、HID)及异步I/O等工程实践。本文聚焦于使用VC++进行原生USB通信开发,详细解析了通过Setup A


驱动开发/核心开发
