UAC虚拟音频设备字符串描述符引起的设备启动失败10

2024-04-11 55 0

半拉子工程,又开始搞起。
重新修改代码,在驱动中测试创建一个UVC相机,一个自定义HID设备,一个UAC麦克风,一个UAC扬声器。不过UAC设备都启动失败了。别外UVC相机的名字也不是自己定指的名字。

如对于UAC扬声器设备指定的为:

    WCHAR strManufacturer[] = { L"USBZH" };
    WCHAR strProduct[] = { L"USB2.0 Speaker" };
    WCHAR strSerialNumber[] = { L"20240411" };

UAC麦克风指为:

    WCHAR strManufacturer[] = { L"USBZH" };
    WCHAR strProduct[] = { L"USB2.0 Microphone" };
    WCHAR strSerialNumber[] = { L"20240411" };

UVC相贡指定为:

    WCHAR strManufacturer[] = { L"USBZH" };
    WCHAR strProduct[] = { L"USB2.0 Camera" };
    WCHAR strSerialNumber[] = { L"20240411" };

最终的显示结果为:
153728113761

而错误号为:
153812637852

This device cannot start. (Code 10)

An invalid parameter was passed to a service or function.

最终发现,原来是因为对于UAC和UVC设备,它们在获取音频控制接口描棕符中的字符串描述符失败引起的。
但UAC是直接是启动失败,而UVC是给一个默认的名称:USB video Device

以前遇到过UAC如果名字不对,也会显示USB Audio Device

我们加上其它的字符口串描述符之后,就好了;

        vUsb->dsc_string[4] = GetStringDescriptor(Pdi->PdiHeader.DeviceInfo.strProduct);
        vUsb->dsc_string[5] = GetStringDescriptor(Pdi->PdiHeader.DeviceInfo.strProduct);
        vUsb->dsc_string[6] = GetStringDescriptor(Pdi->PdiHeader.DeviceInfo.strProduct);

设备管理器中:
154352153305
在Usb Device Tree Viewer显示如下:
154452113498

0 篇笔记 写笔记

USB 字符串描述符
字符串描述符是可选的.如果不支持字符串描述符,其设备描述符,配置描述符,接口描述符内的所有字符串描述符索引都必须为0.字符串描述符的功能USB规范中定义了大量的标识,而这些标识都是以十六进制显示的,这个机器来说是很方便的,但对于人来说,就比较麻烦了。总不能看到一个数值标识就去查表吧,当然这对于熟练......
USB-UAC麦克风 字符串描述符
偏移地址字段长度值描述0bLength10x18描述符长度1bDescriptorType10x03描述符类型:字符串描述符2bString10x00540x00480x00450x00200x00430x004F0x004D0x00500x00410x004E0x0059“THE COMPANY”......
华为UAC耳机 字符串描述符
字符串描述符 -------------------- String Descriptors ------------------- ------ String Descriptor 0 ------bLength : 0x04 (......
HID报表描述符与设备描述符、配置描述符、字符串描述符的通讯格式对比
报表描述符是USB HID规范中一个很重要的概念。USB HID设备报表描述符内容表述了该HID设备的功能及数据传输的格式。USB HID报表描述符在概念上和设备描述符,配置描述符,接口描述符,端点描述符和其它USB设备描述符类似,但是还是有一些细微的区别。我里我们做一个简要的区别:设备描述符、......
USB设备语言ID-索引为0的字符串索引
对于如设备描描述符等相关的描述符,都会有一些字符串索引。主机通过GET_DESCRIPTOR获取对应的字符串索引内容,可以获取这些关于设备的一些描述符信息。如对于设备描述符的iManufacturer,iProduct和iSerialNumber。我们又知道,当对于某些设备没有与之对应的字符串时,......
Teams UCQ字符串描述符
UCQ描述符全称Unified Communications Qualification (UCQ) descriptor。是由 telephony HID device发向商用Skype一组字段,用于表明设备支持的功能。要求:设备应支持UCQ描述符,以告知Skype for Business其独......
UVC扩展单元描述符和设置不当会引起的设备启动失败(code:10)
UVC扩展单元用于UVC设备的自定义通讯,通过UVC扩展单元可以实现一些厂商自定义的通讯和设备特性。在一般的UVC摄像头的描述符布局中,其拓扑结构一般如下:可以看到,这上面的拓扑结构中支持2个扩展单元,所以在USB配置描述符的视频控制接口中就有两个独立的扩展单元描述符。这两件扩展单元的bSource......
Windows系统HID设备的启动过程
在做USB设备固件调试时,经常遇到在设备管理器显示设备启动失败,code:10。这个启动失败从字面意思上,大家都懂,但实际这个启动到底都执行了什么操作了,又没有人能说的清楚。这里本人结合ReactOS的关于HIDUSB的源代码来给大家解释一下。在Windows驱动架构中,一个启动的启动是通过IRP......
虚拟USB设备状态错误信息:This device cannot start. (Code 10)
记个错误的笔记:在原来虚拟USB的设备上需要进行修改,没想到还是翻车了。这个问题应该还是很常见的,就是从设备管理器中查看该设备的状态,显示设备启动失败。设备的状态信息显示:This device cannot start. (Code 10)An invalid parameter was......
Hid.dll获取字符串函数实现
Hid.dll中获取字符串的函数包括以下:HidD_GetProductStringHidD_GetManufacturerStringHidD_GetSerialNumberStringHidD_GetIndexedString这些函数分别通过不同的IOCTL来与HIDCLAS.SYS进行通......
STM32F407的USB获取描述符请求回调函数USBD_DEVICE
STM32F407的USB获取描述符请求回调函数使用结构体USBD_DEVICE来整合。typedef struct _Device_TypeDef{ uint8_t *(*GetDeviceDescriptor)( uint8_t speed , uint16_t *length); ......
HID设备无法启动(代码10)-发送无效的参数给服务或者功能
在对HID设备进行过滤,即通过一个自己构造的HID功能驱动来更新现在的一个HID设备驱动,实现对原来的HID设备进行功能扩展。扩展的功能如下:在原有的配置描述符中增加一个接口描述符,HID描述符,实现一个新的接口功能。对应扩展自己的接口描述符中的HID报告描述符最终的效果就是原来是一个HID设......
UVC相机拓扑结构配置要点总结
做UVC相机开发的人经常是需要编写UVC相机配置描述符的,这个USB配置描述符包括两部分的内容,分别为视频控制接口部分和视频流接口部分。视频控制部分包括的内容主要描述了UVC相机的拓扑结构。一般情况下的相机拓扑结构是这样子的:不过有的时候,我们也需要扩展单元,所以加上扩展单元描述符就如下:这里......
USB字符串描述符iProduct
USB固件上报给主机的描述符信息一部分是给机器看的,另一部分就是给人看的,也主是所谓的屏显。USB字符串描述符指明了USB设备显示的信息,但是在USB规范定义的众名描述符中,几乎人手一份字符串描述符。面对如此众多的字符串描述符,通常系统显示设备的信息会从该字符串描述符中选择出一个比较能代表该设备的字......
USBTreeViewer获取字节串描述符
缘由在于自己虚拟了一个USB控制器集线器,故在使用USBTreeViewer查看其USB集线器下的设备信息时,字节串描述符的问题解决。USB的开发人员肯定对USBTreeViewer这个工具不陌生,我们使用它来查看电脑中USB设备的相关信息。例如设备的连接信息,USB设备描述符,USB配置描述......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!