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…


Driver Coverage Tool Kit

おひさしぶりです。まさかたです。   以前、A寿さんの Blog の記事の中で、WDK for windows 7 で追加された新しいツールとして、OACR について紹介いたしましたが、この他にも様々なツールが追加されました。   New for Windows 7 http://msdn.microsoft.com/en-us/library/dd434869.aspx   そんな中から、今回は、WDK 7.0.0 に追加された Driver Coverage Took Kit という、ドライバーのテストを補助するツールについて、ご紹介したいと思います。   Driver Coverage Tool Kit とは?   Driver Coverage Tool Kit は、ターゲットとなるドライバーにどんな IRP が、どれだけ流れてきているかを調べることができるツールです。 原理的には、ターゲットとなる任意のドライバーに対し、フィルタードライバーをインストールし、流れる IRP を記録していくというものです。   このツールを使えば、例えば、ドライバーの IRP の Dispatch Routine をテストしているときに、テストでどの Dispatch Routine が網羅されているのか、いないのかなど、Coverage を測ることができます。 そのため、この Tool…


USB 2.0 カーネル デバッグ その後

こんにちは、K里です。今回は、以前ご紹介した USB 2.0 カーネルデバッグについての追加情報をお知らせします。USB デバッグの詳細については、まずは以下の記事をご一読いただけますと幸いです。   USB 2.0 カーネル デバッグ 前編 USB 2.0 カーネル デバッグ 後編   上記記事の前編にて、ターゲットマシンの設定 (3) に以下のコマンドがあります。     bcdedit /set {identifier} loadoptions busparams=x.y.z   これは、カーネルデバッガ接続のために使うデバイス (USB EHCI の Host Controller や 1394 Host Controller) を一意に指定するために、デバイスマネージャーで確認される  busparams=<Bus>.<Device>.<Func> の入力を行いますが、この busparams の指定方法が、USB デバッグの場合、ターゲット OS によって何進数で入力するのかが異なります。以下、1394 デバッグも併せてターゲット OS 毎の指定方法を記載します。   Target OS USB 2.0 Debug…


デバイスの有効・無効をプログラムから切り替える方法

みなさま、こんにちは。さなえすです。 デバイスマネージャから、特定のデバイスを有効にしたり、無効にすることができますね。では、このような操作を、プログラムから操作したいとしたら、どうすればよいでしょうか?? (デバイスを右クリックしたところ↓)   そのヒントは、”DevCon” にあります。 先の「デバイスを有効・無効にする API はありますか?」という質問の答えは、Yesです。ただ、単一の API では実現できませんので、複数の SetupDi API 関数などを組み合わせれば可能です、ということになります。(Vista以降のOSですと WMI などを使用しても実現できるようです。2012 年 7 月 30 日時点におきまして前述の方法は確認できておりませんことから訂正させていただきます。)今日は、SetupDi  API関数を使った実現方法について DevCon サンプルを使って、” デバイスの有効・無効をプログラムから切り替える方法” としてご紹介します。DevCon やSetupDi APIについての詳しい説明は、以下のまさかたさんからの投稿を再度参照ください。今回の投稿と併せて読んでいただくことで、違う角度からさらに理解を深められることと思います! DevCon と SetupDi API ~ DevCon の使い方編 ~ SetupDi API と DevCon ~ SetupDi API の使い方編 ~ 1.DevCon サンプルをビルド さて、それでは早速 DevCon サンプルをビルドして、動かすところから始めましょう。(とりあえず、DevCon の操作方法だけ確認したいという方は、こちらからどうぞ。)C ドライブに Windows Driver Kit…


Microsoft Auto Code Review(OACR)とは

皆さん、こんにちは。A寿です。   突然ですが、皆さんはものすごい勢いで沖の方に流されたことはありますか?・・・このお話にご興味のある方は本文の最後の【閑話休題】までどうぞ。   さて、皆さんは、もうWDK for Windows 7 RTM(Windows Driver Kit (WDK) Version 7.0.0のRTM版)をインストールされましたでしょうか? WDK for Windows 7 RTMをインストールしてビルド環境を立ち上げると、タスクバーに緑色のアイコンが追加されて驚かれた方もいらっしゃるかと思います。そして、ドライバをビルドしたりしますと、この緑色のアイコンが時々黄色や赤に変わったりして、さらに驚かれた方もいらっしゃるかと思います。これは、 Microsoft Auto Code Review(OACR)というもので、自動的にソースコードを静的に解析するツールです。今回は、このOACRについてご紹介したいと思います。   OACRとは   OACRとは、PREfast for DriversがWDKのビルド環境に統合されたものです。WDKのビルド環境でドライバやアプリケーションをビルドすると、自動的にソースコードの問題を解析してくれます。OACRはバックグラウンドで動作し、CPUを使用する優先度が低く設定されています。なので、これまでと変わらないスピードでビルドを実行することができます。また、これまでPREfastを使うには、自分でビルド環境上で実行する必要がありましたが、今後は、特に自分で意識して実行しなくても、PREfastが実行されます。PREfastについては、すでに、さなえすさんの「ドライバー検証ツール」の回で説明されておりますので、ご興味のある方はそちらも参照していただけると幸いです。   OACRがどのような動きをするかを具体的に説明するために、実際に動かして見てみましょう。   ビルド環境を起動すると、自動的にOACRが起動します。今回は、例として、Windows Win7 x86 Checked Buildを使ってみます。 初回起動時には、ビルド環境のコマンドプロンプト上に下図のようなメッセージが表示されます。       1行目に「Launching OACR monitor」と表示されていますが、このOACRモニターは、下図の赤丸で囲んだ、緑色のアイコンとして、タスクバーに追加されます。       ただ、Windows 7の場合、デフォルトの設定では、OACRモニターのアイコンがタスクバーから隠されてしまっているので、これを表示したい場合は、[隠れているインジケーターを表示します](タスクバー上の白い三角)→[カスタマイズ]をクリックして、「タスクバーに表示するアイコンと通知の選択」の画面で、下図の「通知のみを表示」から「アイコンと通知を表示」に変更します。       また、先ほどのビルド環境のコマンドプロンプトの2行目の表示に、「Starting dirs creation…


印刷時のスプーリングについて

こんにちは、A尾です。   前回と前々回のブログでは、早速 K里さん、なおきお~さんから Windows 7 のお話をしていただきましたが、私からのプリンタ ネタについては、しばらくは昔の Windows からあるような基本的な内容についてお話させていただく予定です。よろしくお願いいたします。 今回は、印刷時に使用される2つのスプーリング方法についてお話させていただきます。 具体的には、NT EMF スプーリングと RAW スプーリングの2つとなりますが、これらにはどのような違いがあるのでしょうか。まずは NT EMF スプーリングから見ていきましょう。   ■ NT EMF スプーリング     ①アプリケーション印刷処理開始         ↓     ②プリンタデバイス コンテキストへの描画のため、アプリケーションが GDI API を呼び出す         ↓     ③呼び出された API とそのパラメータから、GDI が WinSpool 経由で NT EMF スプール ファイルを作成する         ↓     ④アプリケーション印刷処理終了         ↓     ⑤プリントプロセッサが…


Windows Driver Kit (WDK) Version 7.0.0がリリースされました

こんにちは。なおきお~です。   2009年8月6日(米国時間)に、 Windows Driver Kit (WDK) Version 7.0.0 の RTM が、Microsoft Connect からダウンロードできるようになりました。 ダウンロードの方法は、「DDK/WDK の入手方法 – Welcome, Device driver world!!!」でご紹介した方法と同じ方法でログインをして、“会員一覧” から “Windows Driver Kit (WDK)” をクリックします。そして、ダウンロードを選択すると、“Windows Driver Kit (WDK) 7_0_0” があるので、この項目をクリックして、ダウンロードが終わるまで、ジーッと待っていてください。また、今までダウンロードできた WDK は、“WDK and DDK Archives” をクリックするとダウンロードできるようになっています。   また、今回 WDK は、Windows 7 が対象 OS として、新たにサポートされました。Windows 7 で新たに追加や更新されたドライバの機能は、WDK Documentation の“New Information” → “New for Windows…


デバイス メタデータ パッケージ

こんにちは、K里です。   Windows 7 のリリースが近づいてまいりました。WDK も現在 Windows 7 RC 用の WDK としてキットの配布がされています。その中で、一部の新要素となるデバイス メタデータについてお話したいと思います。お役にたてれば幸いです。   デバイス メタデータパッケージ Windows 7 の新機能に “デバイスとプリンター” と “Device Stage” があります。デバイスとプリンター画面では、ユーザーが PC 上で使用する様々なデバイス (プリンター、スキャナー、デジタルカメラ、ポータブルオーディオプレーヤー、携帯電話などなど) を一元管理します。また、Device Stage 画面では、各デバイスに応じた固有のインターフェースを提供します。たとえば、デジタルカメラであれば、写真を取り込んだり編集したり、オーディオプレーヤーであれば、音楽を再生したり、などといったインターフェースを提供することになると思います。デバイスメーカー各社は、これらの機能を利用することで、ユーザーエクスペリエンスの向上や、自社ブランドを高めるためのビジュアル インターフェースを提供することができます。     話を戻しますと、上述のデバイスとプリンター、ならびに Device Stage を定義する情報が、デバイスメタデータ パッケージとなります。デバイス メタデータ パッケージは、複数の XML スキーマとイメージ ファイルでパッケージング化されます。なお Device Stage については、WDK とは別に Microsoft Device Experience Development Kit があります。詳細については下記 URL をご参照ください。…


SetupDi API と DevCon ~ SetupDi API の使い方編 ~

まさかたです。こんにちは。   前回、「DevCon と SetupDi API ~ DevCon の使い方編 ~」で、DevCon とその使い方について、簡単にご紹介させていただきました。 今回は、サンプルソースコードでどういう風に SetupDi API が使われているのかを見て、その基本的な使い方を紹介したいと思います。   ■DevCon のコマンドオプションとコールバック関数 さて、DevCon コマンドに渡すオプションが、それぞれどのコードに対応するかですが、これは、Cmds.cpp 内に、各コマンドに対応してコールされる関数名が、DispatchTable として定義されておりますので、ここから、オプション毎にどの関数が呼ばれているかが簡単に分かります(cmds.cpp 2308 行目より)。 (結局、オプション名の直前に “cmd” がついた関数を見ればいいわけです。) 2308    DispatchEntry DispatchTable[] = { 2309        { TEXT(“classfilter”),  cmdClassFilter, MSG_CLASSFILTER_SHORT, MSG_CLASSFILTER_LONG }, 2310        { TEXT(“classes”),      cmdClasses,     MSG_CLASSES_SHORT,     MSG_CLASSES_LONG }, 2311        { TEXT(“disable”),      cmdDisable,     MSG_DISABLE_SHORT,     MSG_DISABLE_LONG…


ドライバ インストール時のトラブルシューティングの第一歩

皆さん、こんにちは。A寿です。   突然ですが、皆さんは魚に手足をかじられたことはありますか?・・・このお話にご興味のある方は本文の最後の【閑話休題】までどうぞ。     さて、今回は、「ドライバインストール時のトラブルシューティングの第一歩」をご案内したいと思います。お客様からのお問い合わせの中に、よく「ドライバのインストールに失敗するのですが、どうすればよいのでしょうか?」とおっしゃられる方がいらっしゃいます。その場合に、お客様に最初にご確認いただく情報として、以下の2つをご案内することが多いです。     (1) デバイスマネージャで、対象デバイスに警告の「!」マークが出ている場合、プロパティに表示されるエラーコード   (2) setupapi.logを採取してエラーの内容を確認   それでは、(1)から順番に見ていきましょう。   (1) デバイスマネージャで、対象デバイスに警告の「!」マークが出ている場合、プロパティに表示されるエラーコード   デバイスマネージャで、対象デバイスに警告の「!」マークが出ている場合、とは、次のような状態のことを言います。       今回、説明のために、USBフラッシュメモリに「ハードウェアの安全な取り外し」を実行した後、物理的には抜いていない状態を作りました。このデバイスのプロパティを見ると、次のように表示されます。       このプロパティの全般タブの下半分の「デバイスの状態」にあるメッセージと、その後の「コード 47」というエラーコードにご着目ください。このようなエラーコードの解決方法などの説明は、   Device Manager Error Messages http://msdn.microsoft.com/en-us/library/windows/hardware/ff541422(v=vs.85).aspx   を見てください。   今回の例であるコード47の場合は、メッセージ部分に「この問題を解決するには、デバイスを取り外してから再度取り付ける必要があります。」と解決方法が書いてあります。一方、上記ドキュメントの「Code 47 CM_PROB_HELD_FOR_EJECT」のリンクをたどると、   CM_PROB_HELD_FOR_EJECT http://msdn.microsoft.com/en-us/library/windows/hardware/ff538998(v=vs.85).aspx   のドキュメントに行くことができ、そこには、「The device has been prepared for ejection.」というようにコードの説明がされていたり、Error Code、Display Message、Recommended Resolutionのような項目が並んでいたりすることが確認できます。…