ViGEmBus内核驱动深度解析Windows虚拟游戏控制器实现机制【免费下载链接】ViGEmBusWindows kernel-mode driver emulating well-known USB game controllers.项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus作为Windows内核模式驱动程序ViGEmBus通过精确的硬件虚拟化技术在系统层面模拟Xbox 360和DualShock 4游戏控制器为开发者提供了完全透明的输入设备抽象层。该驱动基于Microsoft的Kernel-Mode Driver Framework构建通过创建虚拟物理设备对象VPDO和实现完整的USB协议栈实现了对主流游戏控制器协议的100%兼容性模拟。系统架构设计与内核交互机制ViGEmBus采用分层架构设计核心模块分布在sys/目录下每个组件都有明确的职责划分。驱动入口点位于sys/Driver.cpp的DriverEntry函数这是Windows内核驱动标准初始化例程NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { WDF_DRIVER_CONFIG config; NTSTATUS status; WDFDRIVER driver; WDF_OBJECT_ATTRIBUTES attributes; // 初始化WPP追踪 WPP_INIT_TRACING(DriverObject, RegistryPath); // 注册清理回调 WDF_OBJECT_ATTRIBUTES_INIT(attributes); attributes.EvtCleanupCallback Bus_EvtDriverContextCleanup; WDF_DRIVER_CONFIG_INIT(config, Bus_EvtDeviceAdd); status WdfDriverCreate(DriverObject, RegistryPath, attributes, config, driver); if (!NT_SUCCESS(status)) { WPP_CLEANUP(DriverObject); KdPrint((DRIVERNAME WdfDriverCreate failed with status 0x%x\n, status)); } return status; }驱动使用Windows Driver Framework (WDF)作为基础框架通过WdfDriverCreate创建驱动对象并注册设备添加回调Bus_EvtDeviceAdd。这种设计模式确保了驱动的稳定性和与Windows内核的深度集成。虚拟设备对象创建与管理流程ViGEmBus的核心创新在于其虚拟物理设备对象PDO的管理系统。在sys/EmulationTargetPDO.hpp中定义了EmulationTargetPDO基类为所有虚拟控制器提供统一的接口namespace ViGEm::Bus::Core { class EmulationTargetPDO { public: EmulationTargetPDO(ULONG Serial, LONG SessionId, USHORT VendorId, USHORT ProductId); virtual ~EmulationTargetPDO() default; static bool GetPdoByTypeAndSerial( IN WDFDEVICE ParentDevice, IN VIGEM_TARGET_TYPE Type, IN ULONG SerialNo, OUT EmulationTargetPDO** Object ); static NTSTATUS EnqueueWaitDeviceReady( WDFDEVICE ParentDevice, ULONG SerialNo, WDFREQUEST Request); }; }虚拟设备创建流程遵循Windows内核驱动的最佳实践设备枚举通过EVT_WDF_CHILD_LIST_CREATE_DEVICE回调创建子设备上下文初始化为每个PDO分配专用内存上下文硬件资源分配模拟USB控制器所需的硬件资源协议栈注册注册USB协议处理函数USB协议栈实现与设备模拟Xbox 360控制器协议实现在sys/XusbPdo.cpp中EmulationTargetXUSB类实现了完整的Xbox 360控制器协议。关键的数据结构定义在sys/XusbPdo.hpp中typedef struct _XUSB_INTERRUPT_IN_PACKET { UCHAR Id; UCHAR Size; XUSB_REPORT Report; } XUSB_INTERRUPT_IN_PACKET, *PXUSB_INTERRUPT_IN_PACKET; class EmulationTargetXUSB : public Core::EmulationTargetPDO { public: EmulationTargetXUSB(ULONG Serial, LONG SessionId, USHORT VendorId 0x045E, USHORT ProductId 0x028E); NTSTATUS PdoPrepareDevice(PWDFDEVICE_INIT DeviceInit, PUNICODE_STRING DeviceId, PUNICODE_STRING DeviceDescription) override; NTSTATUS SubmitReportImpl(PVOID NewReport) override; NTSTATUS UsbBulkOrInterruptTransfer(_URB_BULK_OR_INTERRUPT_TRANSFER* pTransfer, WDFREQUEST Request) override; };该实现精确模拟了Microsoft的XUSB协议包括设备描述符生成提供标准的USB设备描述符端点配置模拟中断传输和控制传输端点报告处理处理XUSB_REPORT数据结构状态管理维护控制器连接状态和LED指示DualShock 4控制器协议实现sys/Ds4Pdo.cpp中的EmulationTargetDS4类实现了Sony DualShock 4的HID协议class EmulationTargetDS4 : public Core::EmulationTargetPDO { private: static const int DS4_REPORT_SIZE 0x40; UCHAR _Report[DS4_REPORT_SIZE]; public: NTSTATUS SubmitReportImpl(PVOID NewReport) override; NTSTATUS UsbBulkOrInterruptTransfer(_URB_BULK_OR_INTERRUPT_TRANSFER* pTransfer, WDFREQUEST Request) override; };DS4实现的关键特性包括HID报告描述符提供完整的HID兼容性触摸板模拟支持触摸板输入事件灯光条控制模拟DS4的RGB灯光效果运动传感器提供加速度计和陀螺仪数据用户模式接口与IOCTL通信机制ViGEmBus通过定义在sys/Driver.cpp中的IOCTL处理表为用户模式应用程序提供标准化的通信接口IoctlHandler_IoctlRecord ViGEmBus_IoctlSpecification[] { {IOCTL_VIGEM_CHECK_VERSION, sizeof(VIGEM_CHECK_VERSION), 0, Bus_CheckVersionHandler}, {IOCTL_VIGEM_WAIT_DEVICE_READY, sizeof(VIGEM_WAIT_DEVICE_READY), 0, Bus_WaitDeviceReadyHandler}, {IOCTL_VIGEM_PLUGIN_TARGET, sizeof(VIGEM_PLUGIN_TARGET), 0, Bus_PluginTargetHandler}, {IOCTL_VIGEM_UNPLUG_TARGET, sizeof(VIGEM_UNPLUG_TARGET), 0, Bus_UnplugTargetHandler}, {IOCTL_XUSB_SUBMIT_REPORT, sizeof(XUSB_SUBMIT_REPORT), 0, Bus_XusbSubmitReportHandler}, {IOCTL_XUSB_REQUEST_NOTIFICATION, sizeof(XUSB_REQUEST_NOTIFICATION), sizeof(XUSB_REQUEST_NOTIFICATION), Bus_XusbRequestNotificationHandler}, {IOCTL_DS4_SUBMIT_REPORT, sizeof(DS4_SUBMIT_REPORT), 0, Bus_Ds4SubmitReportHandler}, {IOCTL_DS4_REQUEST_NOTIFICATION, sizeof(DS4_REQUEST_NOTIFICATION), sizeof(DS4_REQUEST_NOTIFICATION), Bus_Ds4RequestNotificationHandler}, {IOCTL_XUSB_GET_USER_INDEX, sizeof(XUSB_GET_USER_INDEX), sizeof(XUSB_GET_USER_INDEX), Bus_XusbGetUserIndexHandler}, {IOCTL_DS4_AWAIT_OUTPUT_AVAILABLE, sizeof(DS4_AWAIT_OUTPUT), sizeof(DS4_AWAIT_OUTPUT), Bus_Ds4AwaitOutputHandler}, };这种设计允许用户模式应用程序通过标准的DeviceIoControl API与驱动程序通信实现设备创建与销毁动态添加和移除虚拟控制器输入报告提交向虚拟设备发送控制器状态输出通知处理接收来自游戏的反馈如震动设备状态查询获取当前虚拟设备信息内存管理与性能优化策略上下文数据结构设计在sys/Driver.h中定义了驱动核心的数据结构typedef struct _FDO_DEVICE_DATA { LONG InterfaceReferenceCounter; LONG NextSessionId; DMFMODULE UserNotification; } FDO_DEVICE_DATA, *PFDO_DEVICE_DATA; typedef struct _FDO_FILE_DATA { LONG SessionId; } FDO_FILE_DATA, *PFDO_FILE_DATA;这种设计实现了引用计数管理确保资源安全释放会话隔离支持多应用程序并发访问内存池优化使用WDF内存池减少碎片中断处理优化驱动采用异步通知机制处理游戏输入事件void Bus_EvtUserNotifyRequestComplete( _In_ DMFMODULE DmfModule, _In_ WDFREQUEST Request, _In_opt_ ULONG_PTR Context, _In_ NTSTATUS NtStatus );通过DMFDriver Module Framework模块实现高效的事件分发减少内核模式到用户模式的上下文切换开销。编译环境配置与驱动签名项目使用Visual Studio 2019和Windows Driver Kit (WDK)进行构建appveyor.yml展示了自动化构建流程image: Visual Studio 2019 platform: - x86 - x64 - ARM64 configuration: - Release environment: DmfRootPath: C:\projects\DMF构建依赖Driver Module Framework (DMF)需要从Microsoft的GitHub仓库克隆到同级目录。驱动签名是生产部署的关键步骤sys/ViGEmBus.inf定义了安装信息[Version] Signature$WINDOWS NT$ ClassSystem ClassGuid{4D36E97D-E325-11CE-BFC1-08002BE10318} Provider%ManufacturerName% CatalogFileViGEmBus.cat技术调试与问题诊断内核调试基础设施驱动集成了WPPWindows Software Trace Preprocessor追踪系统在sys/trace.h中定义#define WPP_CONTROL_GUIDS \ WPP_DEFINE_CONTROL_GUID( \ ViGEmBusTraceGuid, (b51786c6, 9b0e, 4a2e, 0x8f, 0x2d, 0x2f, 0x1a, 0x3c, 0x5d, 0x5a, 0x1f), \ WPP_DEFINE_BIT(TRACE_DRIVER) \ WPP_DEFINE_BIT(TRACE_DEVICE) \ WPP_DEFINE_BIT(TRACE_QUEUE) \ WPP_DEFINE_BIT(TRACE_PDO) \ )常见问题排查设备枚举失败检查Windows设备管理器中的错误代码验证驱动签名状态输入延迟分析IRQL级别和中断处理延迟优化内存分配策略多设备冲突检查SessionId分配逻辑和资源竞争条件协议兼容性问题验证USB描述符和报告格式的准确性系统集成与扩展机制多架构支持项目支持x86、x64和ARM64架构通过条件编译实现平台特定优化#if defined(_AMD64_) #define ARCH_STRING amd64 #elif defined(_X86_) #define ARCH_STRING x86 #elif defined(_ARM64_) #define ARCH_STRING ARM64 #endif第三方集成接口通过标准化的IOCTL接口ViGEmBus可以与多种用户模式库集成ViGEmClient官方C客户端库C#/.NET绑定通过P/Invoke调用驱动接口Python封装通过ctypes访问驱动功能安全性与稳定性考量内存安全防护驱动使用WDF框架的内存管理功能防止常见的内核漏洞池溢出防护使用ExAllocatePoolWithTag进行内存分配缓冲区边界检查所有用户输入都进行长度验证IRQL安全操作确保在正确的IRQL级别执行操作设备权限管理通过Windows安全描述符控制设备访问权限在sys/ViGEmBus.inf中配置[ViGEmBus_Device.NT.Security] Security D:P(A;;GA;;;SY)(A;;GA;;;BA)(A;;GRGWGX;;;IU)性能基准与优化建议延迟分析虚拟控制器的输入延迟主要来自用户模式到内核模式转换约1-2微秒IOCTL处理开销取决于数据大小和复杂性USB协议栈模拟模拟USB中断传输的时间开销优化策略批量报告处理合并多个输入事件减少上下文切换内存预分配重用内存缓冲区减少分配开销中断合并在合适的时机合并多个中断事件架构演进与未来方向虽然ViGEmBus项目已进入维护阶段但其架构设计为Windows虚拟输入设备开发提供了重要参考。未来可能的演进方向包括USB 3.0/XHCI支持扩展对现代USB控制器的模拟无线协议集成支持蓝牙和2.4GHz无线协议模拟DirectInput兼容性扩展对传统DirectInput设备的支持容器化部署支持在Windows容器中运行虚拟控制器ViGEmBus展示了Windows内核驱动开发的成熟模式通过精确的硬件虚拟化和协议模拟为游戏输入设备开发提供了可靠的技术基础。其模块化设计和清晰的接口定义使得扩展新的控制器类型变得相对简单为Windows平台上的输入设备虚拟化树立了技术标杆。【免费下载链接】ViGEmBusWindows kernel-mode driver emulating well-known USB game controllers.项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
ViGEmBus内核驱动深度解析:Windows虚拟游戏控制器实现机制
发布时间:2026/6/4 16:34:13
ViGEmBus内核驱动深度解析Windows虚拟游戏控制器实现机制【免费下载链接】ViGEmBusWindows kernel-mode driver emulating well-known USB game controllers.项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus作为Windows内核模式驱动程序ViGEmBus通过精确的硬件虚拟化技术在系统层面模拟Xbox 360和DualShock 4游戏控制器为开发者提供了完全透明的输入设备抽象层。该驱动基于Microsoft的Kernel-Mode Driver Framework构建通过创建虚拟物理设备对象VPDO和实现完整的USB协议栈实现了对主流游戏控制器协议的100%兼容性模拟。系统架构设计与内核交互机制ViGEmBus采用分层架构设计核心模块分布在sys/目录下每个组件都有明确的职责划分。驱动入口点位于sys/Driver.cpp的DriverEntry函数这是Windows内核驱动标准初始化例程NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { WDF_DRIVER_CONFIG config; NTSTATUS status; WDFDRIVER driver; WDF_OBJECT_ATTRIBUTES attributes; // 初始化WPP追踪 WPP_INIT_TRACING(DriverObject, RegistryPath); // 注册清理回调 WDF_OBJECT_ATTRIBUTES_INIT(attributes); attributes.EvtCleanupCallback Bus_EvtDriverContextCleanup; WDF_DRIVER_CONFIG_INIT(config, Bus_EvtDeviceAdd); status WdfDriverCreate(DriverObject, RegistryPath, attributes, config, driver); if (!NT_SUCCESS(status)) { WPP_CLEANUP(DriverObject); KdPrint((DRIVERNAME WdfDriverCreate failed with status 0x%x\n, status)); } return status; }驱动使用Windows Driver Framework (WDF)作为基础框架通过WdfDriverCreate创建驱动对象并注册设备添加回调Bus_EvtDeviceAdd。这种设计模式确保了驱动的稳定性和与Windows内核的深度集成。虚拟设备对象创建与管理流程ViGEmBus的核心创新在于其虚拟物理设备对象PDO的管理系统。在sys/EmulationTargetPDO.hpp中定义了EmulationTargetPDO基类为所有虚拟控制器提供统一的接口namespace ViGEm::Bus::Core { class EmulationTargetPDO { public: EmulationTargetPDO(ULONG Serial, LONG SessionId, USHORT VendorId, USHORT ProductId); virtual ~EmulationTargetPDO() default; static bool GetPdoByTypeAndSerial( IN WDFDEVICE ParentDevice, IN VIGEM_TARGET_TYPE Type, IN ULONG SerialNo, OUT EmulationTargetPDO** Object ); static NTSTATUS EnqueueWaitDeviceReady( WDFDEVICE ParentDevice, ULONG SerialNo, WDFREQUEST Request); }; }虚拟设备创建流程遵循Windows内核驱动的最佳实践设备枚举通过EVT_WDF_CHILD_LIST_CREATE_DEVICE回调创建子设备上下文初始化为每个PDO分配专用内存上下文硬件资源分配模拟USB控制器所需的硬件资源协议栈注册注册USB协议处理函数USB协议栈实现与设备模拟Xbox 360控制器协议实现在sys/XusbPdo.cpp中EmulationTargetXUSB类实现了完整的Xbox 360控制器协议。关键的数据结构定义在sys/XusbPdo.hpp中typedef struct _XUSB_INTERRUPT_IN_PACKET { UCHAR Id; UCHAR Size; XUSB_REPORT Report; } XUSB_INTERRUPT_IN_PACKET, *PXUSB_INTERRUPT_IN_PACKET; class EmulationTargetXUSB : public Core::EmulationTargetPDO { public: EmulationTargetXUSB(ULONG Serial, LONG SessionId, USHORT VendorId 0x045E, USHORT ProductId 0x028E); NTSTATUS PdoPrepareDevice(PWDFDEVICE_INIT DeviceInit, PUNICODE_STRING DeviceId, PUNICODE_STRING DeviceDescription) override; NTSTATUS SubmitReportImpl(PVOID NewReport) override; NTSTATUS UsbBulkOrInterruptTransfer(_URB_BULK_OR_INTERRUPT_TRANSFER* pTransfer, WDFREQUEST Request) override; };该实现精确模拟了Microsoft的XUSB协议包括设备描述符生成提供标准的USB设备描述符端点配置模拟中断传输和控制传输端点报告处理处理XUSB_REPORT数据结构状态管理维护控制器连接状态和LED指示DualShock 4控制器协议实现sys/Ds4Pdo.cpp中的EmulationTargetDS4类实现了Sony DualShock 4的HID协议class EmulationTargetDS4 : public Core::EmulationTargetPDO { private: static const int DS4_REPORT_SIZE 0x40; UCHAR _Report[DS4_REPORT_SIZE]; public: NTSTATUS SubmitReportImpl(PVOID NewReport) override; NTSTATUS UsbBulkOrInterruptTransfer(_URB_BULK_OR_INTERRUPT_TRANSFER* pTransfer, WDFREQUEST Request) override; };DS4实现的关键特性包括HID报告描述符提供完整的HID兼容性触摸板模拟支持触摸板输入事件灯光条控制模拟DS4的RGB灯光效果运动传感器提供加速度计和陀螺仪数据用户模式接口与IOCTL通信机制ViGEmBus通过定义在sys/Driver.cpp中的IOCTL处理表为用户模式应用程序提供标准化的通信接口IoctlHandler_IoctlRecord ViGEmBus_IoctlSpecification[] { {IOCTL_VIGEM_CHECK_VERSION, sizeof(VIGEM_CHECK_VERSION), 0, Bus_CheckVersionHandler}, {IOCTL_VIGEM_WAIT_DEVICE_READY, sizeof(VIGEM_WAIT_DEVICE_READY), 0, Bus_WaitDeviceReadyHandler}, {IOCTL_VIGEM_PLUGIN_TARGET, sizeof(VIGEM_PLUGIN_TARGET), 0, Bus_PluginTargetHandler}, {IOCTL_VIGEM_UNPLUG_TARGET, sizeof(VIGEM_UNPLUG_TARGET), 0, Bus_UnplugTargetHandler}, {IOCTL_XUSB_SUBMIT_REPORT, sizeof(XUSB_SUBMIT_REPORT), 0, Bus_XusbSubmitReportHandler}, {IOCTL_XUSB_REQUEST_NOTIFICATION, sizeof(XUSB_REQUEST_NOTIFICATION), sizeof(XUSB_REQUEST_NOTIFICATION), Bus_XusbRequestNotificationHandler}, {IOCTL_DS4_SUBMIT_REPORT, sizeof(DS4_SUBMIT_REPORT), 0, Bus_Ds4SubmitReportHandler}, {IOCTL_DS4_REQUEST_NOTIFICATION, sizeof(DS4_REQUEST_NOTIFICATION), sizeof(DS4_REQUEST_NOTIFICATION), Bus_Ds4RequestNotificationHandler}, {IOCTL_XUSB_GET_USER_INDEX, sizeof(XUSB_GET_USER_INDEX), sizeof(XUSB_GET_USER_INDEX), Bus_XusbGetUserIndexHandler}, {IOCTL_DS4_AWAIT_OUTPUT_AVAILABLE, sizeof(DS4_AWAIT_OUTPUT), sizeof(DS4_AWAIT_OUTPUT), Bus_Ds4AwaitOutputHandler}, };这种设计允许用户模式应用程序通过标准的DeviceIoControl API与驱动程序通信实现设备创建与销毁动态添加和移除虚拟控制器输入报告提交向虚拟设备发送控制器状态输出通知处理接收来自游戏的反馈如震动设备状态查询获取当前虚拟设备信息内存管理与性能优化策略上下文数据结构设计在sys/Driver.h中定义了驱动核心的数据结构typedef struct _FDO_DEVICE_DATA { LONG InterfaceReferenceCounter; LONG NextSessionId; DMFMODULE UserNotification; } FDO_DEVICE_DATA, *PFDO_DEVICE_DATA; typedef struct _FDO_FILE_DATA { LONG SessionId; } FDO_FILE_DATA, *PFDO_FILE_DATA;这种设计实现了引用计数管理确保资源安全释放会话隔离支持多应用程序并发访问内存池优化使用WDF内存池减少碎片中断处理优化驱动采用异步通知机制处理游戏输入事件void Bus_EvtUserNotifyRequestComplete( _In_ DMFMODULE DmfModule, _In_ WDFREQUEST Request, _In_opt_ ULONG_PTR Context, _In_ NTSTATUS NtStatus );通过DMFDriver Module Framework模块实现高效的事件分发减少内核模式到用户模式的上下文切换开销。编译环境配置与驱动签名项目使用Visual Studio 2019和Windows Driver Kit (WDK)进行构建appveyor.yml展示了自动化构建流程image: Visual Studio 2019 platform: - x86 - x64 - ARM64 configuration: - Release environment: DmfRootPath: C:\projects\DMF构建依赖Driver Module Framework (DMF)需要从Microsoft的GitHub仓库克隆到同级目录。驱动签名是生产部署的关键步骤sys/ViGEmBus.inf定义了安装信息[Version] Signature$WINDOWS NT$ ClassSystem ClassGuid{4D36E97D-E325-11CE-BFC1-08002BE10318} Provider%ManufacturerName% CatalogFileViGEmBus.cat技术调试与问题诊断内核调试基础设施驱动集成了WPPWindows Software Trace Preprocessor追踪系统在sys/trace.h中定义#define WPP_CONTROL_GUIDS \ WPP_DEFINE_CONTROL_GUID( \ ViGEmBusTraceGuid, (b51786c6, 9b0e, 4a2e, 0x8f, 0x2d, 0x2f, 0x1a, 0x3c, 0x5d, 0x5a, 0x1f), \ WPP_DEFINE_BIT(TRACE_DRIVER) \ WPP_DEFINE_BIT(TRACE_DEVICE) \ WPP_DEFINE_BIT(TRACE_QUEUE) \ WPP_DEFINE_BIT(TRACE_PDO) \ )常见问题排查设备枚举失败检查Windows设备管理器中的错误代码验证驱动签名状态输入延迟分析IRQL级别和中断处理延迟优化内存分配策略多设备冲突检查SessionId分配逻辑和资源竞争条件协议兼容性问题验证USB描述符和报告格式的准确性系统集成与扩展机制多架构支持项目支持x86、x64和ARM64架构通过条件编译实现平台特定优化#if defined(_AMD64_) #define ARCH_STRING amd64 #elif defined(_X86_) #define ARCH_STRING x86 #elif defined(_ARM64_) #define ARCH_STRING ARM64 #endif第三方集成接口通过标准化的IOCTL接口ViGEmBus可以与多种用户模式库集成ViGEmClient官方C客户端库C#/.NET绑定通过P/Invoke调用驱动接口Python封装通过ctypes访问驱动功能安全性与稳定性考量内存安全防护驱动使用WDF框架的内存管理功能防止常见的内核漏洞池溢出防护使用ExAllocatePoolWithTag进行内存分配缓冲区边界检查所有用户输入都进行长度验证IRQL安全操作确保在正确的IRQL级别执行操作设备权限管理通过Windows安全描述符控制设备访问权限在sys/ViGEmBus.inf中配置[ViGEmBus_Device.NT.Security] Security D:P(A;;GA;;;SY)(A;;GA;;;BA)(A;;GRGWGX;;;IU)性能基准与优化建议延迟分析虚拟控制器的输入延迟主要来自用户模式到内核模式转换约1-2微秒IOCTL处理开销取决于数据大小和复杂性USB协议栈模拟模拟USB中断传输的时间开销优化策略批量报告处理合并多个输入事件减少上下文切换内存预分配重用内存缓冲区减少分配开销中断合并在合适的时机合并多个中断事件架构演进与未来方向虽然ViGEmBus项目已进入维护阶段但其架构设计为Windows虚拟输入设备开发提供了重要参考。未来可能的演进方向包括USB 3.0/XHCI支持扩展对现代USB控制器的模拟无线协议集成支持蓝牙和2.4GHz无线协议模拟DirectInput兼容性扩展对传统DirectInput设备的支持容器化部署支持在Windows容器中运行虚拟控制器ViGEmBus展示了Windows内核驱动开发的成熟模式通过精确的硬件虚拟化和协议模拟为游戏输入设备开发提供了可靠的技术基础。其模块化设计和清晰的接口定义使得扩展新的控制器类型变得相对简单为Windows平台上的输入设备虚拟化树立了技术标杆。【免费下载链接】ViGEmBusWindows kernel-mode driver emulating well-known USB game controllers.项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考