「Windows Driver Model」の版間の差分
アルカディア空間鉄道 (会話 | 投稿記録) 編集の要約なし |
m 外部リンクの修正 http:// -> https:// (ascii.jp) (Botによる編集) |
||
(17人の利用者による、間の22版が非表示) | |||
1行目: | 1行目: | ||
{{出典の明記|date=2016年1月}} |
|||
⚫ | |||
{{更新|date=2016年1月}} |
|||
<!-- 英語版の「Windows Driver Model」を翻訳した2008年当時の情報で止まっている模様。また、出典がない。 --> |
|||
⚫ | |||
== 概要 == |
== 概要 == |
||
WDMドライバは複雑に階層化されており、[ |
WDMドライバーは複雑に階層化されており、{{仮リンク|I/O要求パケット|en|I/O request packet}}<ref>[https://msdn.microsoft.com/ja-jp/library/windows/hardware/hh439638.aspx I/O 要求パケット (Windows Drivers)]</ref> (I/O Request Packet, IRP) を使って相互に通信する。WDMは、各種要求を標準化し書くべきコード量を削減した統一的ドライバーモデルとして、Windows 98とWindows 2000向けに定義された。WDMドライバーは、それ以前のWindows([[Microsoft Windows 95|Windows 95]]や[[Microsoft Windows 3.x|Windows 3.1]]、[[Microsoft Windows NT|Windows NT 4.0]]など)では動作しない。WDMに従ったドライバーは、Windows 98 / Windows 98 Second Edition / [[Microsoft Windows Millennium Edition|Windows Me]] / Windows 2000 / [[Microsoft Windows XP|Windows XP]] / [[Microsoft Windows Server 2003|Windows Server 2003]] / [[Microsoft Windows Vista|Windows Vista]]が動作する[[x86]]ベースの[[コンピュータ]]で[[アプリケーションバイナリインタフェース|バイナリ互換]]と[[アプリケーションプログラミングインタフェース|ソースコード互換]]を実現する。WDMは[[前方互換]]を保つよう設計されている。すなわち、ある版のWDMはそれ以前の版のWDMに従って書かれたドライバーと互換性を有する。そのようなWDMドライバーは新たな[[オペレーティングシステム|OS]]機能を利用することはできないが、新たなOS上でも動作自体は可能である。逆方向の互換性はない。すなわち、新しい版に従ったドライバーを古いOSで使おうとすると失敗する。例えば、Windows XPのWDMはWindows 2000向けドライバーをロード可能だが、Windows XPの新規機能は使えない。逆にWindows 2000のWDMはWindows XP向けドライバーをロードできない。 |
||
WDM仕様に準拠するカーネルモードドライバーはWDMドライバー({{lang-en-short|WDM driver}})と呼ばれる<ref>"Kernel-mode drivers that follow WDM rules are called ''WDM drivers''." ''[https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-wdm Introduction to WDM]''. Windows Hardware Developer.</ref>。 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | : 他のクラスドライバやミニポートドライバをその上に構築できる、一種のフレームワークドライバ。WDMアーキテクチャの異なる階層間のインタフェースを提供する。異なるクラス階層に属するドライバ間の共通機能はクラスドライバとして書くことができ、それを他のクラスドライバやミニポートドライバから利用する。クラスドライバの最下層側はミニポートドライバとのインタフェ |
||
⚫ | |||
⚫ | |||
=== |
=== ファンクションドライバー === |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | : 他のクラスドライバーやミニポートドライバーをその上に構築できる、一種のフレームワークドライバー<ref>[https://ascii.jp/elem/000/000/633/633118/ ASCII.jp:Windowsを動かすデバイスドライバの仕組み 前編 (1/4)|基礎から覚える 最新OSのアーキテクチャー]</ref>。WDMアーキテクチャの異なる階層間の[[インタフェース (情報技術)|インターフェイス]]を提供する。異なるクラス階層に属するドライバー間の共通機能はクラスドライバーとして書くことができ、それを他のクラスドライバーやミニポートドライバーから利用する。クラスドライバーの最下層側はミニポートドライバーとのインターフェイスを持ち、最上層側はOSとのインターフェイスを持つ。クラスドライバーは必要に応じて、動的にロード / アンロードできる。[[ハードウェア]]や[[バス (コンピュータ)|バス]]固有の機能というよりも、クラス固有の機能を持つことが多く、場合によっては単なる列挙 (enumeration) のような機能しか持たないこともある。 |
||
⚫ | |||
⚫ | |||
=== |
=== バスドライバー === |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | Windows 98系OS (98, 98SE, Me) は、WDMと[[仮想デバイスドライバ|VxD]]の両標準をサポートしている。これらは同じハードウェアに対して異なる機能を提供するが、Windows Me登場以降の世代のハードウェアではWDMの方が機能が豊富なものがあった。例えば、[[TVチューナー]]カードをVxDドライバーで使うと画像の解像度が384×288ピクセルだったものが、同じカードをWDMドライバーで使うと768×576ピクセルが可能となることがある。これは、WDMの一部である{{仮リンク|Broadcast Driver Architecture|en|Broadcast Driver Architecture}}による改善{{要出典|date=2008年4月}}である。<!-- BDAはWindows XP以降専用なのだが・・・??? --> |
||
しかし、改良された機能を使用するにはハードウェアベンダーの努力が不可欠である。 |
|||
古いハードウェアではVxDドライバーでは持っていた機能の一部が、WDMドライバーには提供されずに開発が終了されたものも{{要出典範囲|多い|date=2016年1月}}。また、[[Windows 9x系]]のWDMは''Ntkern.vxd''という一種のVxDドライバーがNTカーネルをエミュレートする形であったため、逆にパフォーマンスや安定性で不利になることもあった。 |
|||
== 批判 == |
== 批判 == |
||
Windows Driver Model |
Windows Driver Modelは、それ以前の[[仮想デバイスドライバ|VxD]]とWindows NTドライバーモデルを大幅に改良したが、以下のような点でドライバー開発者から批判されている<ref>[http://www.wd-3.com/archive/FrameworkIntro.htm Introducing Driver Frameworks for Windows May 6]</ref>。 |
||
* WDM |
* WDMは習熟が困難である。 |
||
* |
* {{仮リンク|電源管理|en|Power management}}イベントと[[プラグアンドプレイ]]の連携が難しい。これは、ドライバーコードにおけるバグのせいでWindowsマシンが正しくスリープあるいは復帰できないといった様々な状況を引き起こす。 |
||
* I/Oの取り消しがほぼ不可能である。 |
* [[入出力|I/O]]の取り消しがほぼ不可能である。 |
||
* 全てのドライバに似たような大量のサポートコードを書く必要がある。 |
* 全てのドライバーに似たような大量のサポートコードを書く必要がある。 |
||
* 純粋な[[ユーザモード]]ドライバを書くためのサポートが存在しない。 |
* 純粋な[[ユーザーモード]]ドライバーを書くためのサポートが存在しない。 |
||
また、マイクロソフトが提供する[[ソフトウェアドキュメンテーション|文書]]やサンプルについてもいくつかの問題が指摘されている。 |
また、マイクロソフトが提供する[[ソフトウェアドキュメンテーション|文書]]やサンプルについてもいくつかの問題が指摘されている。 |
||
このような問題があるため、マイクロソフトは |
このような問題があるため、マイクロソフトはWDMの代替となる新たなフレームワーク[[Windows Driver Foundation]]をリリースした。これには、[[Kernel-Mode Driver Framework]] (KMDF) と[[User-Mode Driver Framework]] (UMDF) が含まれる。[[Microsoft Windows Vista|Windows Vista]]はWDMとWindows Driver Foundationの両方をサポートしている。KMDFはWindows XPとWindows 2000向けにダウンロード可能であり、UMDFはWindows XP向けにダウンロード可能となっている。 |
||
<!-- HACK: 「Windows Driver Foundation」という名称は2016年現在廃止されていて、「Windows Driver Frameworks」に変更されているのでは? MSDNの前者のページは後者のページにリダイレクトされる。 --> |
|||
== ドライバー署名 == |
|||
Windowsドライバーはセキュリティ上の配慮から、正式な作成者を確認することのできる[[デジタル署名]]を行なってリリースすることが推奨されている。デジタル署名の手段としては{{仮リンク|WHQL|en|WHQL Testing}} (Windows Hardware Quality Labs) 署名もしくは{{仮リンク|Authenticode|en|Authenticode}}署名(自己署名)が存在する。Windows Vista以降の32bit版OSでは署名のないドライバーをインストールしようとした際に警告が表示されるものの、インストールおよび動作は可能となる。一方、64bit版OSでは署名のない[[カーネルモード]]のドライバーを動作させることはできない<ref>[https://atmarkit.itmedia.co.jp/ait/articles/1009/09/news112.html 64bit Windows時代到来:第4回 64bit版デバイス・ドライバ (1/3) - @IT]</ref>。署名のないドライバーをインストールおよび動作できるテストモードも用意されているが、これは開発者向けの内部テスト目的であり、エンドユーザー環境では推奨されない<ref>[http://blogs.msdn.com/b/jpwdkblog/archive/2011/08/29/10201505.aspx ドライバーのデジタル署名の基礎 - Japan WDK Support Blog - Site Home - MSDN Blogs]</ref>。 |
|||
[[Windows 8]]では、64bit版においてカーネルモードだけでなく[[ユーザーモード]]のドライバーも署名が必須となった<ref>[http://blogs.msdn.com/b/jpwdkblog/archive/2013/04/25/10413859.aspx ドライバーのデジタル署名の留意点 - Japan WDK Support Blog - Site Home - MSDN Blogs]</ref>。 |
|||
[[Windows 10]]では2016年1月1日の[[SHA-1]]証明書廃止ポリシーを受けて、カーネルモードのドライバーは32bit/64bitにかかわらず[[マイクロソフト]]社による署名が必須となることが予定されている。ユーザーモードのドライバーに関しては、[[Windows 8.1]]同様にAuthenticode署名が利用可能である<ref>[http://blogs.msdn.com/b/jpwdkblog/archive/2015/09/18/windows-10-sha-1.aspx Windows 10 と SHA-1 廃止ポリシーによるドライバー署名への影響について - Japan WDK Support Blog - Site Home - MSDN Blogs]</ref>。 |
|||
== 関連項目 == |
== 関連項目 == |
||
*[[Windows Driver Foundation]] |
* [[Windows Driver Foundation]] (WDF) |
||
⚫ | |||
== 脚注 == |
|||
{{脚注ヘルプ}} |
|||
{{reflist}} |
|||
== 参考文献 == |
== 参考文献 == |
||
{{脚注の不足|section=1|date=2016年1月}} |
|||
* Finnel, Lynn (2000). ''MCSE Exam 70-215, Microsoft Windows 2000 Server''. Microsoft Press. ISBN 1-57231-903-8. |
* Finnel, Lynn (2000). ''MCSE Exam 70-215, Microsoft Windows 2000 Server''. Microsoft Press. ISBN 1-57231-903-8. |
||
* Oney, Walter (2003). ''Programming the Windows Driver Model'', Microsoft Press, ISBN 0-7356-1803-8. |
* Oney, Walter (2003). ''Programming the Windows Driver Model'', Microsoft Press, ISBN 0-7356-1803-8. |
||
== 外部リンク == |
== 外部リンク == |
||
* [http://www.staudio.de/kb/english/drivers/ Windows driver API basics] - サウンドカード用ドライバの基本(WDM、[[ASIO]]、[[MME]]、DirectX |
* [http://www.staudio.de/kb/english/drivers/ Windows driver API basics] - サウンドカード用ドライバーの基本(WDM、[[ASIO]]、[[Windows Multimedia Extensions|MME]]、[[DirectX]]など) |
||
* [http://channel9.msdn.com/Showpost.aspx?postid=156316 Channel 9 Video] - マイクロソフトの Device Management and Installation チームへのインタビュー。主に[[プラグアンドプレイ]]について |
* [http://channel9.msdn.com/Showpost.aspx?postid=156316 Channel 9 Video] - マイクロソフトの Device Management and Installation チームへのインタビュー。主に[[プラグアンドプレイ]]について |
||
* [http://msdn.net/library/ja/default.asp?url=/library/ja/jpdndxgen/htm/WhatsNewDX81.asp DirectX 8.1 の新機能] - [[Broadcast Driver Architecture]]について |
|||
{{Microsoft APIs}} |
|||
[[Category:オペレーティングシステムの仕組み]] |
|||
⚫ | |||
{{DEFAULTSORT:かそうてはいすとらいは}} |
|||
[[da:WDM]] |
|||
[[Category:デバイスドライバ]] |
|||
⚫ | |||
⚫ | |||
[[es:Windows Driver Model]] |
|||
[[it:Windows Driver Model]] |
|||
[[ko:윈도 드라이버 모델]] |
|||
[[pt:Windows Driver Model]] |
|||
[[zh:Windows Driver Model]] |
2024年7月18日 (木) 19:05時点における最新版
Windows Driver Model (WDM) とは、Windows 98とWindows 2000で導入されたデバイスドライバーのフレームワークであり、それ以前のWindowsで使われていたVxDなどを代替するものとして登場した。導入当時はWin32 Driver Modelと呼ばれていた。
概要
[編集]WDMドライバーは複雑に階層化されており、I/O要求パケット[1] (I/O Request Packet, IRP) を使って相互に通信する。WDMは、各種要求を標準化し書くべきコード量を削減した統一的ドライバーモデルとして、Windows 98とWindows 2000向けに定義された。WDMドライバーは、それ以前のWindows(Windows 95やWindows 3.1、Windows NT 4.0など)では動作しない。WDMに従ったドライバーは、Windows 98 / Windows 98 Second Edition / Windows Me / Windows 2000 / Windows XP / Windows Server 2003 / Windows Vistaが動作するx86ベースのコンピュータでバイナリ互換とソースコード互換を実現する。WDMは前方互換を保つよう設計されている。すなわち、ある版のWDMはそれ以前の版のWDMに従って書かれたドライバーと互換性を有する。そのようなWDMドライバーは新たなOS機能を利用することはできないが、新たなOS上でも動作自体は可能である。逆方向の互換性はない。すなわち、新しい版に従ったドライバーを古いOSで使おうとすると失敗する。例えば、Windows XPのWDMはWindows 2000向けドライバーをロード可能だが、Windows XPの新規機能は使えない。逆にWindows 2000のWDMはWindows XP向けドライバーをロードできない。
WDM仕様に準拠するカーネルモードドライバーはWDMドライバー(英: WDM driver)と呼ばれる[2]。
WDMはWindows 2000のカーネルモードドライバーの中間層として存在し、Windows向けドライバー作成に際しての機能を増やし、ドライバーを書きやすくすることを意図していた。WDMはWindows 98とWindows 2000の間でバイナリ互換性およびソースコード互換性を保つよう設計された。WDMドライバーは以下のように分類される。
ファンクションドライバー
[編集]ファンクションドライバーは、デバイス用の主要なドライバーである。ファンクションドライバーはデバイスベンダーが作成するのが普通である。1つのドライバーが複数のデバイスを制御することもできる。
- クラスドライバー
- 他のクラスドライバーやミニポートドライバーをその上に構築できる、一種のフレームワークドライバー[3]。WDMアーキテクチャの異なる階層間のインターフェイスを提供する。異なるクラス階層に属するドライバー間の共通機能はクラスドライバーとして書くことができ、それを他のクラスドライバーやミニポートドライバーから利用する。クラスドライバーの最下層側はミニポートドライバーとのインターフェイスを持ち、最上層側はOSとのインターフェイスを持つ。クラスドライバーは必要に応じて、動的にロード / アンロードできる。ハードウェアやバス固有の機能というよりも、クラス固有の機能を持つことが多く、場合によっては単なる列挙 (enumeration) のような機能しか持たないこともある。
- ミニポートドライバー
- USB、サウンドカード、SCSI、ネットワークカードなどに対応したファンクションドライバー。これらはWindowsのバージョン間でバイナリおよびソースコード互換性があり、ハードウェア固有のものだが、ハードウェアへのアクセス制御を固有バスのクラスドライバー経由で行なう。
バスドライバー
[編集]バスドライバーは、バスコントローラー、バスアダプター、バスブリッジなどを扱う。マイクロソフトが提供しているバスドライバーとしては、PCI、PnPISA、SCSI、USB、IEEE 1394などがある。各ベンダーは必要に応じて独自のバスドライバーを作成できる。バスドライバーは、同じタイプのバスが複数あれば、それらをまとめて制御できる。
フィルタードライバー
[編集]フィルタードライバーはオプション的なドライバーであり、機能を付加したりデバイスの動作を変更したりするドライバーや、デバイスとは関係ないドライバーが属する。フィルタードライバーは同時に複数のサービスを提供できる。上位層のフィルタードライバーは、デバイス用ファンクションドライバーの上位に位置し、下位層のフィルタードライバーはファンクションドライバーとバスドライバーの中間に位置する。
- ドライバーサービス
- カーネルレベルのフィルタードライバーであり、Windowsサービスとして実装され、アプリケーションからデバイスを使えるようにする。
VxD、WDMとWindows 98
[編集]Windows 98系OS (98, 98SE, Me) は、WDMとVxDの両標準をサポートしている。これらは同じハードウェアに対して異なる機能を提供するが、Windows Me登場以降の世代のハードウェアではWDMの方が機能が豊富なものがあった。例えば、TVチューナーカードをVxDドライバーで使うと画像の解像度が384×288ピクセルだったものが、同じカードをWDMドライバーで使うと768×576ピクセルが可能となることがある。これは、WDMの一部であるBroadcast Driver Architectureによる改善[要出典]である。
しかし、改良された機能を使用するにはハードウェアベンダーの努力が不可欠である。 古いハードウェアではVxDドライバーでは持っていた機能の一部が、WDMドライバーには提供されずに開発が終了されたものも多い[要出典]。また、Windows 9x系のWDMはNtkern.vxdという一種のVxDドライバーがNTカーネルをエミュレートする形であったため、逆にパフォーマンスや安定性で不利になることもあった。
批判
[編集]Windows Driver Modelは、それ以前のVxDとWindows NTドライバーモデルを大幅に改良したが、以下のような点でドライバー開発者から批判されている[4]。
- WDMは習熟が困難である。
- 電源管理イベントとプラグアンドプレイの連携が難しい。これは、ドライバーコードにおけるバグのせいでWindowsマシンが正しくスリープあるいは復帰できないといった様々な状況を引き起こす。
- I/Oの取り消しがほぼ不可能である。
- 全てのドライバーに似たような大量のサポートコードを書く必要がある。
- 純粋なユーザーモードドライバーを書くためのサポートが存在しない。
また、マイクロソフトが提供する文書やサンプルについてもいくつかの問題が指摘されている。
このような問題があるため、マイクロソフトはWDMの代替となる新たなフレームワークWindows Driver Foundationをリリースした。これには、Kernel-Mode Driver Framework (KMDF) とUser-Mode Driver Framework (UMDF) が含まれる。Windows VistaはWDMとWindows Driver Foundationの両方をサポートしている。KMDFはWindows XPとWindows 2000向けにダウンロード可能であり、UMDFはWindows XP向けにダウンロード可能となっている。
ドライバー署名
[編集]Windowsドライバーはセキュリティ上の配慮から、正式な作成者を確認することのできるデジタル署名を行なってリリースすることが推奨されている。デジタル署名の手段としてはWHQL (Windows Hardware Quality Labs) 署名もしくはAuthenticode署名(自己署名)が存在する。Windows Vista以降の32bit版OSでは署名のないドライバーをインストールしようとした際に警告が表示されるものの、インストールおよび動作は可能となる。一方、64bit版OSでは署名のないカーネルモードのドライバーを動作させることはできない[5]。署名のないドライバーをインストールおよび動作できるテストモードも用意されているが、これは開発者向けの内部テスト目的であり、エンドユーザー環境では推奨されない[6]。
Windows 8では、64bit版においてカーネルモードだけでなくユーザーモードのドライバーも署名が必須となった[7]。
Windows 10では2016年1月1日のSHA-1証明書廃止ポリシーを受けて、カーネルモードのドライバーは32bit/64bitにかかわらずマイクロソフト社による署名が必須となることが予定されている。ユーザーモードのドライバーに関しては、Windows 8.1同様にAuthenticode署名が利用可能である[8]。
関連項目
[編集]- Windows Driver Foundation (WDF)
- Windows Display Driver Model (WDDM)
脚注
[編集]- ^ I/O 要求パケット (Windows Drivers)
- ^ "Kernel-mode drivers that follow WDM rules are called WDM drivers." Introduction to WDM. Windows Hardware Developer.
- ^ ASCII.jp:Windowsを動かすデバイスドライバの仕組み 前編 (1/4)|基礎から覚える 最新OSのアーキテクチャー
- ^ Introducing Driver Frameworks for Windows May 6
- ^ 64bit Windows時代到来:第4回 64bit版デバイス・ドライバ (1/3) - @IT
- ^ ドライバーのデジタル署名の基礎 - Japan WDK Support Blog - Site Home - MSDN Blogs
- ^ ドライバーのデジタル署名の留意点 - Japan WDK Support Blog - Site Home - MSDN Blogs
- ^ Windows 10 と SHA-1 廃止ポリシーによるドライバー署名への影響について - Japan WDK Support Blog - Site Home - MSDN Blogs
参考文献
[編集]- Finnel, Lynn (2000). MCSE Exam 70-215, Microsoft Windows 2000 Server. Microsoft Press. ISBN 1-57231-903-8.
- Oney, Walter (2003). Programming the Windows Driver Model, Microsoft Press, ISBN 0-7356-1803-8.
外部リンク
[編集]- Windows driver API basics - サウンドカード用ドライバーの基本(WDM、ASIO、MME、DirectXなど)
- Channel 9 Video - マイクロソフトの Device Management and Installation チームへのインタビュー。主にプラグアンドプレイについて
- DirectX 8.1 の新機能 - Broadcast Driver Architectureについて