0

学習課題として、Windows 7 64 ビットで有線 XBox 360 コントローラー用のフィルター ドライバーを作成しようとしています。このコントローラーは HID ジョイスティックとして表示されるので、簡単なように思えます。

マウスの左ボタンと右ボタンを入れ替えるサンプル フィルター ドライバーを作成しました。これは、WDK に付属する moufiltr と firefly のサンプルに基づいています。ただし、この例を XBox 360 コントローラーで動作するように変換するのに問題があります。

コントローラーを接続すると、デバイス マネージャーに 3 つの異なるデバイスが表示されます。

  • ヒューマン インターフェイス デバイス/HID準拠のゲーム コントローラー
  • ヒューマン インターフェース デバイス/USB ヒューマン インターフェース デバイス
  • 共通コントローラー for Windows Class/Xbox 360 Controller for Windows

これらのどれにドライバーを接続する必要がありますか?

マウス フィルター ドライバーを使用すると、firefly サンプルのインストール手順に従うことができました。デバイス マネージャーでマウスを右クリックし、[ドライバーの更新] を選択します。XBox 360 コントローラーでは、どのデバイス用のドライバーをインストールすればよいかわかりません。それとも、それらはすべて独立してハードウェアと通信しており、それぞれにフィルターをインストールする必要がありますか?

フィルター ドライバーで使用できる IOCTL を出力するために、3 つのデバイスのそれぞれにフィルター ドライバーを接続しようとしたことに注意してください。「USB ヒューマン インターフェイス デバイス」の場合、フィルターは IOCTL を受け取りませんでした。

HID 準拠のゲーム コントローラーの場合、以下を受け取りました。

  • IOCTL_HID_GET_COLLECTION_INFORMATION (複数回)
  • IOCTL_HID_GET_COLLECTION_DESCRIPTOR (複数回)
  • IOCTL_GET_SYS_BUTTON_CAPS

Xbox 360 Controller for Windows の場合、シンボリック名を追跡できない一連の IOCTL を受け取ります。

  • 0x80006000 (複数回)
  • 0x8000e00c (複数回)
  • 0x8000e008
  • 0x8000a010
  • 0x8000e018
  • 0x8000e014

残念ながら、どのデバイスをフィルタリングしようとしているのか、まだわかりません。(そのうちの 1 つがジョイスティックに相当する IOCTL_INTERNAL_MOUSE_CONNECT を受け取ることを望んでいましたが、そうではないようです。)

4

2 に答える 2

0

内部 IOCTL (具体的には IOCTL_HID_GET_INPUT_REPORT/IOCTL_HID_READ_REPORT) をフィルター処理したいと思います。

EvtIoDeviceControl をフィルタリングしている可能性があります。EvtIoInternalDeviceControl を試して、読み取り/入力レポート ioctl を探します。これは、システム サービスがジョイスティック イベントを読み取りたい場合に発生します。

適切な ioctl をフィルタリングできたら、そのジョイスティックのレポート記述子を調べて、データを解釈 (および変更) する方法を理解する必要があります。

于 2011-06-01T02:57:53.883 に答える