マイクロソフトは、当初から大量のデバイスドライバーを作り続けてきた。もちろん、GPUのようにデバイスドライバーのできが性能を左右するようなデバイスでは、メーカー自身がドライバーを提供する。一方でマイクロソフトも、Windowsのインストールパッケージに最初から入れておく、「安定」したドライバーを持っている(必ずしもマイクロソフトがゼロから作ったものばかりでもない)。これを「インボックスドライバー」と呼んで、メーカー配布のドライバーと区別することがある。
すでに広く使われてはいるが、いまや主流の製品ではなく、メーカーのサポートも十分には行なわれていないようなデバイスの多くが、このインボックスドライバーに依存している。安価なUSBデバイスになると、メーカーによるデバイスドライバーの提供さえない。例えばUSBメモリーでは、デバイスドライバーが付属するようなものの方が今やまれである。
またUSBなどでは、デバイスをいくつかの種類にわけているが、中でもHIDデバイスは、キーボードやマウスなどさまざまな種類の入力デバイスを包含している。実はHIDデバイスは、USBを介して一定の手順と一定のデータ形式だけをやりとりするようになっている。そのためデータ転送などの部分はほとんど共通で、あとは「やってきたデータをどう処理するのか」を、別のドライバーで決めるようになっている。つまりマウスもキーボードも、扱うデータの大まかな構造は同じだが、その中身を解釈して、OSに通知する方法だけが違うわけだ。
複雑なデバイスドライバーのレイヤー構造
最近の周辺機器は、多くがUSBで接続するようになっている。このUSB自体も、OSからみればひとつのデバイスである。そのため、USBコントローラーにアクセスしたり、あるいはUSBを使ってデバイスとデータをやりとりするためには、デバイスドライバーが必要になる。
Windowsで「デバイス マネージャー」を起動し、「表示」メニューで「デバイス(接続別)」に切り替えてみると、「PCIバス」の下にUSBホストコントローラー(利用しているチップセットなどにより名称は違う)がある。その先にはさらに「USBルートハブ」があって、その下に実際のデバイスがある。例えばキーボードなら、以下のようなつながりになっている。
PCIバス | ||||
---|---|---|---|---|
USBホストコントローラー | ||||
USB Root Hub | ||||
USB入力デバイス | ||||
HIDキーボードデバイス |
つまり、USBキーボードからの入力を受け取るためには、PCIバスを制御してUSBホストコントローラーにアクセスしなければならないわけだ。

この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第11回
PC
マルチコアCPUの消費電力はスケジューリングで変わる? -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第9回
PC
マルチコアCPUを賢く使いこなす スケジューリングの秘密 -
第8回
PC
意味の違いがわかる? タスクとプロセスとスレッド -
第7回
PC
Windowsのメモリー管理をx86の仕組みから読み解く -
第6回
PC
メモリー不足を根本的に解決する64bit OSの仕組み -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第3回
PC
OSの仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ