You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下模拟控制器设备的内核驱动开发求助

Windows内核驱动模拟USB设备及插拔事件实现指引

核心思路

无需从零开发USB控制器驱动,Windows提供的KMDF/KMDF框架已支持虚拟设备栈,可通过以下路径实现需求:

  • 基于虚拟总线驱动作为父节点,向PnP管理器报告设备的添加/移除,模拟插拔动作。
  • 构造符合USB规范的设备描述符,让Windows识别为合法USB设备,无需实现底层控制器逻辑。

关键技术点

  • 虚拟总线驱动:实现极简总线驱动,负责枚举虚拟子设备,触发PnP事件模拟插拔。
  • USB描述符构造:必须提供标准的设备/配置/接口描述符,这是Windows识别设备的核心依据。
  • PnP事件触发:通过内核API向系统报告设备的出现/消失,完成插拔模拟。

代码示例片段(KMDF内核模式)

1. 模拟设备插入(总线驱动核心逻辑)

NTSTATUS VirtualBus_ReportDeviceInsert(WDFDEVICE BusDevice)
{
    WDFSTRING instanceIdStr;
    NTSTATUS status = WdfStringAllocate(NULL, &instanceIdStr);
    if (!NT_SUCCESS(status)) return status;

    // 构造符合规范的设备实例ID
    WdfStringSetUnicodeString(instanceIdStr, L"VirtualUSB\\MockDevice001");

    // 向PnP管理器报告新设备
    status = IoReportDetectedDevice(
        WdfDeviceWdmGetDeviceObject(BusDevice),
        WdfStringGetUnicodeString(instanceIdStr)->Buffer,
        NULL,
        NULL,
        0
    );

    WdfStringFree(instanceIdStr);
    return status;
}

2. 模拟设备拔出

NTSTATUS VirtualBus_ReportDeviceRemove(WDFDEVICE BusDevice, PCWSTR InstanceId)
{
    UNICODE_STRING instanceIdUstr;
    RtlInitUnicodeString(&instanceIdUstr, InstanceId);

    // 通知PnP管理器移除设备
    return IoReportDeviceRemoval(
        WdfDeviceWdmGetDeviceObject(BusDevice),
        &instanceIdUstr
    );
}

3. USB设备描述符示例(虚拟设备驱动中)

// 标准USB设备描述符
USB_DEVICE_DESCRIPTOR MockUsbDeviceDesc = {
    sizeof(USB_DEVICE_DESCRIPTOR), // bLength
    USB_DEVICE_DESCRIPTOR_TYPE,    // bDescriptorType
    0x0200,                        // bcdUSB (USB 2.0)
    0x00,                          // bDeviceClass (接口级定义类)
    0x00,                          // bDeviceSubClass
    0x00,                          // bDeviceProtocol
    0x40,                          // bMaxPacketSize0
    0x1234,                        // idVendor (自定义厂商ID)
    0x5678,                        // idProduct (自定义产品ID)
    0x0100,                        // bcdDevice
    1,                             // iManufacturer
    2,                             // iProduct
    3,                             // iSerialNumber
    1                              // bNumConfigurations
};

参考方向

  • 官方文档:
    • KMDF虚拟总线开发:重点阅读「Bus Drivers for Plug and Play Devices」章节,掌握PnP枚举逻辑。
    • USB驱动开发:「USB Device Driver Programming Guide」,学习USB描述符规范与设备栈交互。
  • 官方示例:
    • Virtual Bus Driver Sample(KMDF):官方虚拟总线模板,可直接修改为虚拟USB总线。
    • USB Function Class Samples:参考USB设备初始化与描述符构造逻辑。
  • 核心API:IoReportDetectedDevice、IoReportDeviceRemoval、WdfDeviceCreate

注意事项

  • 驱动需签名,测试阶段可开启Windows测试模式或使用测试签名。
  • 虚拟设备硬件ID需符合规范,可直接匹配系统自带的usbccgp.sys通用USB驱动。

内容的提问来源于stack exchange,提问作者IgnoreExeption

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:57:23