「仮想デバイスドライバ」の版間の差分
m +Category:デバイスドライバ |
|||
10行目: | 10行目: | ||
== 外部リンク == |
== 外部リンク == |
||
[http://tech.millto.net/~morry/ Morry's Un'Gramming Page](既に閉鎖されているが[[インターネット |
[http://tech.millto.net/~morry/ Morry's Un'Gramming Page](既に閉鎖されているが[[インターネットアーカイブ]] [http://www.archive.org/]から参照可能) |
||
{{Microsoft APIs}} |
{{Microsoft APIs}} |
2017年9月4日 (月) 19:32時点における版
仮想デバイスドライバ (Virtual Device Driver, VxD)とはWindows 3.xからWindows 9x系までにおいて用いられたデバイスドライバの形式である。VxDとは仮想デバイスドライバの多くがVデバイスD(例えばマウスのドライバならVMOUSEDという具合)のように名付けられていたことに由来する。
VxDは次のような経緯で誕生した。そもそもは、シングルタスクだったDOSアプリケーションがハードウェアデバイスを独占的に使用していたことによる。そのため、Windows/386からWindows上で複数のDOSアプリケーションを実行可能となるにあたって、そのままでは複数のDOSアプリケーション同士でデバイスの使用要求が衝突する可能性が懸念された。
そこで、マイクロソフトは各DOSアプリケーションを仮想DOSマシン (VDM) と呼ばれる仮想機械上で動作することにした。仮想機械内ではデバイスも仮想化され、DOSアプリケーションがデバイスだと思って操作しているものは、実際のデバイスではない。代わって相手をするのが仮想デバイスドライバである。仮想デバイスドライバは各仮想マシンの要求を調停して実際のハードウェアを操作する。この「仮想デバイスを提供する」という点から仮想デバイスドライバと呼ばれるのである。仮想機械のインターフェイスとして16ビットコードと32ビットコードの混在が必要になるため、Linear Executable形式のファイルとなっている。
なお、DOSアプリケーションや16ビットWindowsアプリケーションばかりでなく、Win32アプリケーションでもInt 21hソフトウェア割り込みなど一部の仮想デバイスの操作は可能である。手順としては、CreateFile関数でVxDオブジェクトを作成し、得られたハンドルを基にDeviceIoControl関数を呼び出す。そのような例は、95でディスクボリュームをオープンする方法やOSR2上の Int 21 読み取り/書き込みトラックが失敗するなどに散見される。
Windows NT系はVxDに対応していない。Windows 2000やWindows XPではWindows Driver Model (WDM) が用いられている。Windows Vistaでは、新しくWindows Driver Foundation (WDF) も導入されている。
外部リンク
Morry's Un'Gramming Page(既に閉鎖されているがインターネットアーカイブ [1]から参照可能)