CD.001

USBデバイスドライバ技術

刊行日:2000531

体 裁:CD-R、B5版換算で164

価 格:49,600円(税別)

 

執筆者

小林 勝彦 日本電気エンジニアリング株式会社 ワークステーション事業部 システムソリューション技術部 主任

 

 1996年にWDM(Windows Driver Model)についての発表がMicrosoft社より行われ、USBドライバが実装されて以来、その当時からは想像もできないほど、さまざまなUSB周辺機器が市場に出回るようになった。
USBについては2.0の仕様も策定され、対応するデバイスもこれまで以上に多種多用なものとなり、PCと周辺機器のインタフェースとしてさらに標準的な位置を占めることが予想される。
しかし、ハードウェアの設計で各社のUSBコントローラが利用できるとしても、設計したハードウェアを動作させるための情報収集が、製品開発の現場においては以前として敷居の高いものに思えるのではないだろうか。
それは、ハードウェアを動作させるためのドライバをどのようにして開発すればいいのか、あるいはMicrosoft社から提供されている標準のドライバを使用する場合であっても、ドライバの動作についての知識がなければ、ファームウェアの設計もできないからである。
 本書では、USBドライバのベースになっているWDMについて、その背景、位置付け、動作概要などについて解説を行っている。
WDMドライバは今後、Windows2000などのNTカーネルが主流となっても利用され続ける重要なコンポーネントである。WDMの機能については拡張されていく部分が今後も予想されるため、エンジニアの方々には本書をWDMへの知識習得の手がかりとして、さらに新しい技術を習得していただきたい。
最後に、本書の刊行にあたり、担当としてご協力頂いた田上氏(トリケップス)に、この場を借りてお礼申し上げる。

第1章 WDMの概要 ⇒sample
 1. WDMの背景
  1.1 Windows98の構成
  1.2 Windows2000の構成
  1.3 Windowsのロードマップ
  1.4 過去のWindowsのドライバ
  1.5 WDMのねらい
  1.6 WDMの特徴
  1.7 ドライバの機能種別
 2.Windowsとハードウェア
  2.1 ハードウェア抽象化の目的
  2.2 Windowsの実行モード
  2.3 割込み要求レベル
  2.4 メモリ管理
 3.デバイスとドライバの対応 ⇒sample
  3.1 Windows98の場合
  3.2 Windows2000の場合
 4.WDMドライバの構成要素
  4.1 ドライバオブジェクト
  4.2 デバイスオブジェクト
  4.3 デバイスエクステンション
  4.4 ディスパッチルーチン
 5.WDMドライバの状態遷移
 6.ドライバ階層間のインタフェース
  6.1 一般的に言えること
  6.2 USBストレージドライバの例
  6.3 PDO、FDOのドライバ階層
 7.アプリケーションとドライバ
  7.1 Win32APIからのアクセス
  7.2 デバイス名とシンボリックリンク
 8.I/O Request Packet
  8.1 IRPの構成
  8.2 IRPスタック
  8.3 メジャー機能コード
  8.4 PNPマイナー機能コード
  8.5 POWERマイナー機能コード
  8.6 I/Oコントロールコード
  8.7 IRPの実行
 9.ドライバルーチン ⇒sample
  9.1 StartIoルーチン
  9.2 キャンセルルーチン
  9.3 I/Oタイマルーチン
  9.4 I/O完了ルーチン
  9.5 割り込みサービスルーチン
  9.6 DPCルーチン
  9.7 スレッド
 10.割り込み同期
  10.1 割り込みブロック
  10.2 スピンロック
  10.3 シングルプロセッサでのスピンロック
 11.スレッド同期
  11.1 時間の同期
  11.2 イベント
  11.3 ミューテックス
  11.4 セマフォ
 12.WMI
  12.1 WMIの概要
  12.2 WMIサポートのドライバ
  12.3 WMIサポートの手順
  12.4 WDMドライバとIRP
第2章 一般的なUSBドライバ ⇒sample
 1.USBの基礎知識
  1.1 USBデバイスの構成
  1.2 ディスクリプタ
  1.3 インタフェース
  1.4 データ転送種別
  1.5 リクエスト
 2.USBのドライバ階層
  2.1 USB1.1のドライバスタック
  2.2 USB2.0のドライバスタック
 3.USBドライバの処理
  3.1 DriverEntry
  3.2 AddDevice
  3.3 デバイスのスタート
  3.4 オープン
  3.5 データのリード/ライト
  3.6 コントロール
  3.7 クローズ
  3.8 デバイスの停止
  3.9 Unload
 4.USBドライバスタックの提供する機能 ⇒sample
 5.USB リクエストブロック
  5.1 _URB_SELECT_INTERFACE
  5.2 _URB_SELECT_CONFIGURATION
  5.3 _URB_PIPE_REQUEST
  5.4 _URB_GET_CURRENT_FRAME_NUMBER
  5.5 _URB_BULK_OR_INTERRUPT_TRANSFER
  5.6 _URB_ISOCH_TRANSFER
  5.7 _URB_CONTROL_DESCRIPTOR_REQUEST
  5.8 _URB_CONTROL_GET_STATUS_REQUEST
  5.9 _URB_CONTROL_FEATURE_REQUEST
  5.10 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST
  5.11 _URB_GET_INTERFACE_REQUEST
  5.12 _URB_CONFIGURATION_REQUEST
  5.13 URB_TAKE_FRAME_LENGTH_CONTROL
  5.14 URB_RELEASE_FRAME_LENGTH_CONTROL
 6.USBドライバスタックのステータス
第3章 ドライバ間インタフェース ⇒sample
 1.アプリケーションとのインタフェース
  1.1 定期的なポーリング
  1.2 デバイス構成の変更メッセージ
  1.3 レジストリの検索
  1.4 デバイスインタフェース
 2.VxDとのインタフェース
  2.1 レジストリによるアドレス通知
  2.2 ntkern.vxdの関数を使用
  2.3 Mapperドライバ
 3. WDM間のインタフェース
  3.1 デバイスオブジェクトアドレスの取得
  3.2 ドライバのAttach/Detach
  3.3 インポートライブラリの使用
 4.アプリケーションとのイベント制御
  4.1 非同期IRPによる方法
  4.2 ユーザーモードイベントによる方法
 5.デバイスリレーション
  5.1 子デバイスの作成/削除
  5.2 FDOの処理
  5.3 PDOの処理
  5.4 その他の処理
第4章 ドライバ開発環境の構築
 1.開発マシン
 2.開発ツール紹介
  2.1 必須のツール
  2.2 あると便利なツール
  2.3 その他のユーティリティ
 3.ツール類のインストール手順
 4.ドライバのビルド
  4.1 コマンドラインによるビルド
  4.2 VC++のIDE(統合環境)からのビルド
 5.ドライバ用クラスライブラリの活用
 6.ドライバのインストール
  6.1 infファイル
  6.2 Windows98
  6.3 Windows2000
  6.4 ドライバ用デジタル署名
 7.ドライバのデバッグ
  7.1 デバッグ表示、デバッグブレーク
  7.2 トレース結果をメモリになどに保持
  7.3 バスアナライザ
  7.4 ASSERT
  7.5 Checkedビルドの使用
  7.6 各種のチップセットでの評価
第5章 開発事例の説明
 1.USBプリンタ
  1.1 Windowsのプリントシステム
  1.2 USBポートモニタ
  1.3 USBプリンタクラスドライバ
 2.USBストレージ
  2.1 Windows98のストレージドライバ
  2.2 Windows2000のストレージドライバ
 3.USBシリアルポート
第6章 その他
 1.OSの差異
  1.1 Windows95 OSR2.x
  1.2 Windows2000
 2.参考書籍
 3.関連のURL
 4.infファイルのサンプル
 5.CUsbDeviceクラスのヘッダ
 6.CUsbDevice のソース