25 1.3 デバイスとドライバの対応 それでは、周辺機器が Windows 内でドライバとどのように対応付けられて いるかを本項で示す。ハードウェアは接続されるとレジストリ内に記憶されド ライバに関連付けられる。 1.3.1 Windows98 の場合 1.3.1.1 ハードウェアキー ハードウェアキーは HKEY_LOCALMACHINE のサブキーに登録される。 ハードウェアキー シリアルI Dが設定されたデバ HKEY_LOCAL_MACHINE イスはこのキーがシリアルI D Enum の文字列で作成される USB VID_0409&PID_3240 1USB&ROOT_HUB&PCI&VEN_8086&DEV_7112& SUBSYS_00000000&REV_01&BUS_00&DEV_07&FUNC_02 キーの内容 Class ClassGUID DeviceDesc Driver “USB” “{36FC9E60-C465-11CF-8056-444553540000}” “USB Test Device” “USB¥0002” HardwareID Mfg “USB¥Vid_0409&Pid_3240&Rev_0001,USB¥Vid_0409&Pid...” “NEC” 図 1-7 Windows98 のハードウェアキー 図 1-7に示したハードウェアの例は USB デバイスである。 HKEY_LOCAL_MACHINE¥Enum のキーの下には、デバイスの種別が列挙 される。レジストリエディタで確認できるように、他にも SCSI や FLOP など、 PC に接続したデバイスのすべてが登録されている。Enum キーの下には、ベ ン ダ 名 と 製 品 名 を 表 す キ ー が 作 成 さ れ て お り 、 こ の 例 の 0409 は、 USB Implementers Forum で割り当てられた NEC の ID を表している。3240 は NEC 内で管理している製品コードであり、各社が決定するものである。 USB のデバイスの場合、この数値はデバイスが保持しているデバイスディス 26 クリプタに記述されている値となる。さらに、ベンダ名と製品名を表すキーの 下には、デバイスの実体をあらわすキーが作成される。このキーは、USB デバ イスのシリアル ID の実装によって異なる。 表 1-2 シリアル ID によるキー作成方法 シリアル ID が未設定 シリアル ID が設定されている ホスト PC のルートハブ経由で、デバ イスまでのハブなどのデバイス ID が 記述される。 接続経路を個々のデバイスについて記 述することで、個々のデバイスを識別 する。 シリアル ID の文字列のキーが作成さ れる キーの内容にはデバイスに対応したドライバをインストールするための inf ファイルで記述された内容などが格納される。その中の項目には DeviceDesc といったデバイスマネージャで表示されるデバイスの説明などがある。 また、重要なのは Driver という文字列であり、ハードウェアに対応したド ライバキーの格納位置を示す。 1.3.1.2 ドライバキー ドライバキー HKEY_LOCAL_MACHINE System CurrentControlSet Services Class USB 0002 キーの内容 DevLoader “*ntkern” DriverDate “2-15-2000” DriverDesc “USB Test Device” InfPath “usbtest.inf” InfSection “usbtest.Install” MatchingDeviceId “USB¥VID_0409&PID_3240” NTMPDriver “usbtest.sys” ProviderName “NEC” 図 1-8 Windows98 のドライバキー 27 ドライバキーも HKEY_LOCAL_MACHINE のサブキーに登録される。 ドライバキーは、CurrentControlSet¥Services¥Class から、ハードウェア キー内の項目 Drivers の相対指定 USB¥0002 で示されることになる。0002 は ドライバがインストールされるたびに割り振られる番号であり、ドライバが追 加されるたびに+1 される。ドライバもハードウェアキーの場合と同様、ドラ イバの説明の文字列などが格納される。また、NTMPDriver は NT Mini Port Driver を意味し、ドライバのファイル名を格納する。 このような関連付けから、デバイスの接続をシステムが検知すると、システ ムはこのファイルのドライバをロードすることができる。 なお、DevLoader の記述はデバイスドライバをロードするドライバである。 この図 1-8の場合は、ntkern.vxd を指定していることになる。この例のように アスタリスクがつき、かつ拡張子が指定されていない記述の場合、ドライバが 1 つのファイルとして存在するのではなく、VMM32.VxD の中に配置されてい るファイルを意味する。 しかし、コンフィギュレーションマネージャをデバイスローダとして使用し、 ドライバが PnP スタティック VxD の記述の場合もアスタリスクをつけて、拡 張子を省略する記述を行っている。 1.3.2 Windows2000 の場合 Windows2000 の場合も同様にハードウェアとドライバの関連付けが行われ ている。 1.3.2.1 ハードウェアキー Windows2000 では、Enum キーが CurrentControlSet の下になっており、 また、ControlSet001、ControlSet002 のキーが CurrentControlSet のコピー となっている。 USB デバイスのベンダ ID、プロダクト ID のハードウェアキーの作成にあ たっては Windows98 の場合と同じく、USB デバイスのディスクリプタが参照 されている。 シリアル番号が設定されない場合には、Inst_0 のように、実体の番号がキー の名前に使われている。ドライバキーへの参照には USB というクラスの名称 ではなく、クラスの GUID(Global Unique ID)の文字列が格納される。 なお、Windows98 と異なり、このキーは保護されており、セキュリティの 設定を変更しない限り、レジストリエディタで削除することができないように なっている。 28 ドライバ開発者は開発環境においては、32 ビット版のレジストリエディタを 使用して、セキュリティを変更することができる。 ハードウェアキー HKEY_LOCAL_MACHINE SYSTEM ControlSet001 ControlSet002 CurrentControlSet Enum シリアルI Dが設定されたデバイスは このキーがシリアルI Dの文字列で作 成される USB Vid_0409&Pid_3240 0000001 Control Device Parameters LogConf キーの内容 Class ClasssGuid “USB” “{36FC9E60-C46…. CompatibleIDs DeviceDesc Driver HardwareID Mfg “USB¥Class_ff&Sub…” “USB Test Device” “{36FC9E …}¥ 0001” “USB¥Vid_0409&Pid...” “NEC” Service “USBTEST” Inst_0 図 1-9 Windows2000 のハードウェアキー 1.3.2.2 ドライバキー ドライバキー HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control Class {36FC9E60-C465-11CF-8...} 0001 キーの内容 DevLoader DriverDesc InfPath InfSection InfSectionExt MatchingDeviceId NTMPDriver ProvidorName “*ntkern” “USB Test Device” “oem1.inf” “Test.Install” “.NT” “usb¥vid_0409&pid_3240 “usbtest.sys” “NEC” 図 1-10 Windows2000 のドライバキー 29 Windows2000 のドライバキーも Windows98 の場合とほぼ同様の内容とな っ て い る 。 な お 、 ド ラ イ バ の イ ン ス ト ー ル で 使 用 し た inf フ ァ イ ル は Windows2000 の inf ディレクトリの下にコピーされる。このときにファイル名 を oem1.inf のように番号付きのファイル名としてコピーされ、その名前がレジ ストリに書き込まれる。 1.3.2.3 サービスキー ドライバはサービスとして機能提供をするよう、サービスリストに登録され る。 サービスとドライバは異なった機能であり、サービスはサービスコントロー ラ仕様書にしたがって実装されたユーザモードのプロセスである。ドライバは すでに述べたようにカーネルコードのモジュールである。 この場合のサービスはドライバのフロントエンドとして見えることになり、 サービス列挙などの関数を利用できると思われるが、現状、筆者は Windows98 と共通に使えるような形態のドライバ開発しか経験していないため、サービス 関連の機能は利用したことがない。筆者はサービスの列挙の代わりにデバイス インタフェース(後述)を利用している。 サービスの名前や開始のタイミングなどは inf ファイルで指定する。また、 ドライバキーの場合と同じく、サービスキーの内容にはドライバのファイル名 が指定されている。 サービスキー HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services USBTEST Enum Security キーの内容 DisplayName ErrorControl ImagePath “USB Test Device Miniport Driver” 0x00000001 “System32¥DRIVERS¥usbtest.sys” Start Type 0x00000003 0x00000001 図 1-11 Windows2000 のサービスキー
© Copyright 2024 Paperzz