首页 文章

将过滤器驱动程序连接到Xbox 360控制器的设备是什么?

提问于
浏览
0

作为一个学习练习,我试图在Windows 7 64位上为有线XBox 360控制器编写一个过滤器驱动程序 . 该控制器显示为HID操纵杆,因此它看起来应该是直截了当的 .

我为我的鼠标做了一个示例过滤器驱动程序,它可以交换鼠标左键和右键 . 这是基于WDK附带的moufiltr和firefly样本 . 但是,我无法将此示例转换为XBox 360控制器 .

当我插入控制器时,设备管理器中会出现3个不同的设备:

  • 人机接口设备/符合HID标准的游戏控制器

  • 人机接口设备/ USB人机接口设备

  • 适用于Windows的Windows Class / Xbox 360 Controller的通用控制器

我应该将我的驱动程序中的哪一个附加到?

使用鼠标过滤器驱动程序,我能够跟踪firefly示例中的installation directions:在设备管理器中右键单击鼠标,选择"update driver."使用XBox 360控制器,我不确定我应该为哪个设备安装驱动程序 . 或者他们是否都独立地与硬件通信,我需要为每个硬件安装一个过滤器?

我应该注意到,我已经尝试将过滤器驱动程序附加到3个设备中的每个设备,以便打印出我的过滤器驱动程序可用的IOCTL . 对于“USB人机接口设备”,我的过滤器没有收到IOCTL .

对于符合HID标准的游戏控制器,它收到:

  • IOCTL_HID_GET_COLLECTION_INFORMATION(多次)

  • IOCTL_HID_GET_COLLECTION_DESCRIPTOR(多次)

  • IOCTL_GET_SYS_BUTTON_CAPS

对于Windows的Xbox 360控制器,它收到一堆IOCTL,我无法追踪符号名称:

  • 0x80006000(多次)

  • 0x8000e00c(多次)

  • 0x8000e008

  • 0x8000a010

  • 0x8000e018

  • 0x8000e014

不幸的是,我仍然不知道我应该尝试过滤哪个设备 . (我希望他们中的一个会接收相当于IOCTL_INTERNAL_MOUSE_CONNECT的操纵杆,但事实并非如此 . )

1 回答

  • 0

    我想你想过滤内部IOCTL(特别是IOCTL_HID_GET_INPUT_REPORT / IOCTL_HID_READ_REPORT)

    您可能已经过滤了EvtIoDeviceControl尝试EvtIoInternalDeviceControl并查找读取/获取输入报告ioctl,这将来自任何想要读取操纵杆事件的系统服务 .

    一旦您设法过滤正确的ioctl,您将需要查看该操纵杆的报告描述符,以找出如何解释(然后修改)数据 .

相关问题