USB中文网虚拟USB控制器USB集线器成果展示
2024-01-03
117
0
一直有一个心愿,就是虚拟USB全家桶。
从USB控制器,USB集线器开始,再到各个USB类设备。
当然USB类设备也是很多的,包括HID,UVC,UAC,大容量存储等各种USB设备。
由于本人对以上UVC, UAC ,HID待相对熟悉一些,故以这些设备来展示。
整个驱动分为以下几层:
typedef enum _VDEVICE_TYPE
{
VDEV_FROOT, //根虚拟节点FDO
VDEV_PHCI, //USB控制器PDO
VDEV_FHCI, //USB控制器FDO
VDEV_PHUB, //USB根集线器PDO
VDEV_FHUB, //USB根集线器FDO
VDEV_PUSB //USB设备PDO
}VDEVICE_TYPE;
所以整个驱动内部层次分为6部分。
由于本人给根集线器默认给了16个端口,所以在虚拟设备时,也是类型轮循虚拟。
for (UCHAR i = 1; i <= 16; i++)
{
switch (i % 4)
{
case 0:
status = CreateHubHidDevice(vHub, i);
break;
case 1:
status = CreateHubCameraDevice(vHub, i);
break;
case 2:
status = CreateHubMicDevice(vHub, i);
break;
case 3:
status = CreateHubSpeakerDevice(vHub, i);
break;
case 4:
break;
default:
break;
}
}
最终安装驱动后,在设备管理器中如下:
通过USBTREEVIEWER可以看到设备信息: