К какому устройству подключить драйвер фильтра для контроллера Xbox 360? - PullRequest
0 голосов
/ 11 мая 2011

В качестве учебного упражнения я пытаюсь написать драйвер фильтра для проводного контроллера XBox 360 в 64-разрядной версии Windows 7. Этот контроллер отображается как HID-джойстик, поэтому кажется, что он должен быть простым.

Я сделал пример драйвера фильтра для моей мыши, который меняет местами левую и правую кнопки мыши. Это было основано на образцах moufiltr и firefly, которые поставляются с WDK. Однако у меня возникают проблемы при преобразовании этого примера в работу для контроллера XBox 360.

Когда я подключаю контроллер, в диспетчере устройств появляются 3 разных устройства:

  • Human Interface Devices / HID-совместимый игровой контроллер
  • Интерфейсные устройства / USB Human Interface Device
  • Общий контроллер для Windows Class / Xbox 360 Контроллер для Windows

К какому из них я должен прикрепить мой драйвер?

Используя драйвер фильтра мыши, я смог выполнить указания по установке из примера светлячка: щелкните правой кнопкой мыши в диспетчере устройств, выберите «обновить драйвер». С контроллером XBox 360 я не уверен, для какого устройства мне следует устанавливать драйвер. Или они все разговаривают с оборудованием независимо, и мне нужно установить фильтр для каждого из них?

Следует отметить, что я пытался подключить драйвер фильтра к каждому из 3 устройств, чтобы распечатать списки IOCTL, доступные для моего драйвера фильтра. Для «USB Human Interface Device» мой фильтр не получил IOCTL.

Для HID-совместимого игрового контроллера получено:

  • IOCTL_HID_GET_COLLECTION_INFORMATION (несколько раз)
  • IOCTL_HID_GET_COLLECTION_DESCRIPTOR (несколько раз)
  • IOCTL_GET_SYS_BUTTON_CAPS

Для контроллера Xbox 360 для Windows он получает набор IOCTL, для которых я не могу отследить символическое имя:

  • 0x80006000 (несколько раз)
  • 0x8000e00c (несколько раз)
  • 0x8000e008
  • 0x8000a010
  • 0x8000e018
  • 0x8000e014

К сожалению, я до сих пор не знаю, какое устройство я должен пытаться фильтровать. (Я надеялся, что один из них получит эквивалент IOCTL_INTERNAL_MOUSE_CONNECT, эквивалентный джойстику, но это не так.)

1 Ответ

0 голосов
/ 01 июня 2011

Я думаю, что вы хотите отфильтровать внутренние IOCTL (в частности, IOCTL_HID_GET_INPUT_REPORT / IOCTL_HID_READ_REPORT)

Возможно, вы фильтровали EvtIoDeviceControl, попробуйте EvtIoInternalDeviceControl и найдите отчет ioctl для чтения / получения, это будет происходить из любой системной службы, которая хочет прочитать события джойстика.

Как только вам удастся отфильтровать правильный ioctl, вам нужно будет посмотреть дескриптор отчета для этого джойстика, чтобы выяснить, как интерпретировать (а затем изменить) данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...