2011-05-11 52 views
0

作爲一種學習練習,我正在嘗試在Windows 7 64位上爲有線XBox 360控制器編寫篩選器驅動程序。這個控制器顯示爲一個HID操縱桿,所以它看起來應該是直截了當的。將哪個設備連接到Xbox 360控制器的過濾器驅動程序?

我已經爲鼠標交換了鼠標左右鍵的過濾器驅動。這是基於WDK附帶的moufiltr和螢火蟲樣品。但是,我無法將此示例轉換爲XBox 360控制器。

當我插上控制器,3級不同的設備出現在設備管理器:

  • 人機接口設備/ HID兼容遊戲控制器
  • 人機接口設備/ USB人機接口設備
  • 公共控制器對於Windows類/ Xbox 360的Windows控制器

這些哪一個我應該附加我的驅動程序?

使用鼠標過濾器驅動程序,我可以按照螢火蟲示例中的installation directions:在設備管理器中右鍵單擊鼠標,選擇「更新驅動程序」。使用XBox 360控制器,我不確定我應該安裝驅動程序的設備。或者他們都獨立地與硬件通話,我需要爲它們中的每一個安裝一個過濾器?

我應該注意到,我已經嘗試將過濾器驅動程序附加到3個設備中的每一個,以便打印出可供我的過濾器驅動程序使用的IOCTL。對於「USB人機接口設備」,我的過濾器沒有收到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,但似乎並非如此。)

回答

0

我想你想過濾的內部的IOCTL(特別IOCTL_HID_GET_INPUT_REPORT/IOCTL_HID_READ_REPORT)

你可能已經被過濾EvtIoDeviceControl嘗試EvtIoInternalDeviceControl並尋找讀/獲取輸入報告的ioctl,這無論從任何系統發服務想要閱讀操縱桿事件。

一旦您設法過濾正確的ioctl,您將需要查看該操縱桿的報告描述符以找出如何解釋(然後修改)數據。

相關問題