Keyboard Filter Driver

皆様、楽しいデバッグライフをお送りしておりますでしょうか! WDK サポートチームのI沢でございます。   今月も私がお送りしたいと思いますが、これまでのようなツール紹介ではございません! 今回は、キーボードフィルタドライバにつきまして、ご紹介したいと思います。   私はキーボードフィルタドライバと聞くだけで、馬鹿なことをやったな…と思いだすことがあります。 当時、まだ若かった私はキーボードフィルタドライバを実装していたのですが、手軽にいろいろできたので、"Ctrl + Alt + Del" の同時押しを抑制して強制終了できなくしてみたらどうなるだろう…?と対象のキーを抑制したドライバを検証用の PC ではなく作業用の PC にインストールしてしまいました。 オチは想像できるかと思いますが、それはもう見事に Windows にログインできなくなりました! それを機に、絶対にドライバ開発は検証用の環境で行おう…と心に誓いました。みなさまもお気を付けくださいね! ちなみにそのときは、別の PC に対象のストレージを接続して、ドライバのバイナリファイルを削除することで復旧いたしました。   ■キーボードフィルタドライバについて キーボードフィルタドライバは、簡単に説明するとキーボードの入力をフィルタリングして、入力を無効にしたり、別のキーに置き換えたり、キー入力を追加したりといったことが可能になります。 フィルタリングはカーネルモードで行われるため、ユーザーモードではフィルタリングされたキー入力結果があたかも実際にそのような入力があったかのように見えます。 実際どのような場面で使用されるかというと、例えばショートカットキーによる強制終了等の特定の処理を抑制したり、キーの連射機能を実現したりと、キー入力に関わることであれば大抵のことが可能です。 ただ、よくお聞きするのがフィルタドライバの実装は難しそう…といったご意見です。しかし、キーボードフィルタについてはその限りではありません。 優秀なサンプルプログラムがございますので、たった 1 つの関数を変更するだけでキー入力のフィルタリングを行うドライバが実装できるのです。   ■ KeyboardClassServiceCallback ルーチンについて さて、早速キーボードフィルタドライバのサンプルプログラムを見ていきましょう。 サンプルプログラムは以下のサイトからダウンロード可能です。ダウンロードした zip ファイルは適当な場所に展開しましょう。   Keyboard Input WDF Filter Driver (Kbfiltr) <http://code.msdn.microsoft.com/windowshardware/Kbfiltr-WDF-Version-685ff5c4>   展開したら、ソースコードを確認してみましょう。 "<展開したフォルダ>\C++\sys\kbfiltr.c" の 766…


Windows OS 標準ドライバが強化されたタッチデバイス

こんにちは、なおきお~です。 スマートフォンなどのペリフェラル デバイスは、インプット デバイスとしては、キーボードやマウス デバイスではなく、タッチ デバイスが、必須となってきていますが、寒い日の外出先では反応が悪くなって困っています。 さて、Windows OS でも、Windows標準ドライバとして、USB接続のHIDのタッチ ドライバを提供しており、Windows 7でBluetooth接続のタッチ ドライバを追加し、Windows 8でBluetooth LEやI2Cの接続のタッチ ドライバ追加しています。 このようにWindows標準ドライバを強化することでハードウェアメーカーさんがドライバを開発しなくてもよいシナリオを増やしていっています。 Transport Windows 7 Windows 8 Notes USB Yes Yes Support for USB HID 1.11+ is provided on Windows operating systems dating back to Windows 2000. Bluetooth Yes Yes Support for Bluetooth HID 1.1+ is provided on Windows operating systems…


Multi-Touch デバイスの Elotouch Driver サンプル コード

皆さん、遅ればせながら、明けましておめでとうございます。なおきお~です。   年末にWindows Touchの話題に触れ、USBのHID デバイスではない場合は、サンプル コードがあることをご紹介しました。   そのサンプル コードのMulti-Touchに関して、少々説明したいと思います。   Multi-Touchデバイスの場合、Elotouch Driverを参照されるのがよいと思います。   まず、%BASEDIR%\src\input\hiddigi\EloMT\elotouch.cのgReportDescriptorをご参照いただくと前回ご案内したHID の仕様書のMulti-touch digitizersのサンプルと似た構成であり、マウスと2地点のMulti-Touchデバイスになっています。 また、この情報はgReportDescriptorは、IOCTL_HID_GET_REPORT_DESCRIPTORを経由して、HID Classに通知します。      Multi-touch digitizers    http://www.usb.org/developers/hidpage/HUTRR34.zip   次にElotouch Driverは、シリアル接続を想定しており、%BASEDIR%\src\input\hiddigi\EloMT\elotouch.cのTranslateRawDataToHID関数で、デバイスから読み込んだデータをHIDのデータに変換しています。   また、デバイスから読み込むデータの形式は、HIDのデータに変換できるのであれば、自由に決めることができます。 Elotouch Driverの場合、以下のMulti-Touchとマウスで、それぞれ以下のように定義しています。   typedef struct _OEM_RAW_SERIAL_PACKET_1 {     union     {         struct         {             UCHAR  Status; ← 以下のフラグを設定 #define ELO_MT_1_DOWN          0x05   // Down #define…


Windows Touch

ご無沙汰しております。なおきお~です。 年末となり、皆様、如何お過ごしでしょうか? 今年最後の投稿をさせていただきます。   まず、私たち、DDK/WDK サポートチームの中で、今年 最も大きなニュースは、やはりWindows 7のリリースです。 そのWindows 7のデバイス ドライバ関連でのトピックと言えば、Windows Touchがあります。   さて、Windows Touchに対応したデバイス ドライバというのは、どうやって開発するのかご存知でしょうか? 開発するデバイスにもよりますが、USB の HID デバイスならば、Windows 7標準のデバイス ドライバが動くので、デバイス ドライバを開発/提供しなくてもいいのです。   Windows Touch Overview http://msdn.microsoft.com/en-us/library/ee220483.aspx 抜粋: If your digitizer device supports HID in firmware, you are not required to provide a driver.   さて、デバイス ドライバは、必要ないとして、USB HID のデバイスは、どうすればいいのだろう?と思われた方は、HID の仕様書をご確認ください。 HID Informationには、Multi-touch digitizersの情報があります。このMulti-touch digitizersに準拠していたら、Windows…