最小構成の仮想ファイルシステムドライバの製作

この記事はWindowsNT系向けのファイルシステムドライバの作成方法を解説するものです。 内容はNeko Project 21/W向けのWindowsNT用ドライバ製作の際に調査した内容に基づいています。

この手の内容は日本語での解説が少なく、旧OS対応かつ最小構成となるとまた更に情報が少ないのが現状です。 そこで、本記事はカーネルモードドライバの最小構成から始まり、エクスプローラでダミーファイルを表示可能なファイルシステムドライバを完成させることを目標とします。

1. 基礎知識

1.1. ファイルシステムドライバとは

ファイルシステムドライバはWindows上でディスクのように振る舞えるドライバのことです。 ドライブ文字を割り当ててエクスプローラ等でアクセスできます。

大雑把な関係としては

エクスプローラ
 ↓
WinAPI
 ↓
ファイルシステムドライバ ←これ
 ↓
物理ディスクドライバ

みたいな感じです。

物理ディスクドライバの例としてはRAMディスクがありますが、フォーマットが必要だったり、標準ファイルシステムに合わせないといけなかったりするなど、ファイル単位で処理を実行したい用途では勝手がよくありません。

一方、ファイルシステムドライバはファイルやディレクトリの構造を前提にした要求(ファイルを開く、ファイルを探す、等)が来ますので、これに適切に返すだけでエクスプローラで表示可能な仮想的なデバイスが作れます。

1.2. ファイルシステムドライバの種類

ファイルシステムドライバはに大雑把にディスクファイルシステムドライバ(FILE_DEVICE_DISK_FILE_SYSTEM)とネットワークファイルシステムドライバ(FILE_DEVICE_NETWORK_FILE_SYSTEM)があります。 前者はPCローカルなディスク用、後者はネットワーク経由のディスク用と思われます。

最小構成の仮想ファイルシステムドライバの製作に当たっては、前者のディスクファイルシステムドライバを作ることを推奨します。 理由は、後者のネットワークファイルシステムドライバの場合、ネットワークリダイレクタ(これも全くといっていいほど情報が無い)も追加で作る必要があり、非常に面倒なことになるためです。上手いやり方があるのかも知れませんが…。 前者の場合はそういうものは不要です。

なお、前者の場合、net useコマンドでドライブ文字を割り当てることは出来ません(ネットワークではないので)。 代わりにWindows APIのDefineDosDeviceを呼んでドライブ文字を割り当てる必要があります。DefineDosDeviceを呼ぶプログラムを別で作成して下さい。 標準コマンドで出来ないのは面倒に思われるかも知れませんが、net useに対応する方がはるかに面倒です。

※決め打ちで問題なければIoCreateSymbolicLinkの際に\DosDevices\Z:(Zドライブの場合)のよう名前でリンクを作れば、DefineDosDeviceしないでドライブ文字を割り当てて使用もできます。

※ネットワークファイルシステムドライバ(FILE_DEVICE_NETWORK_FILE_SYSTEM)の振りをしたディスクファイルシステムドライバも作ろうと思えば作れます。 アイコンに常時×が付けられますが気にしなければ使えます。

1.3. ドライバ署名問題

最近のWindowsは署名がない独自ドライバを弾くようになりました。 TESTSIGNING ONで一応は回避できますが、デスクトップ右下に常時テストモードと表示されます。 Win2000等の旧OSであればこの問題は起こりません。

1.4. PnPドライバとLegacyドライバ

WindowsのカーネルモードドライバにはPnPドライバとLegacyドライバという区分があります。 前者はWindows2000以降で対応した新しいタイプのドライバで、デバイスマネージャなどでカテゴリ分けして表示され、I/Oポート等のリソースを確認調整できます。 一方後者は、WindowsNT時代から使用されていた古い形式のドライバで、I/Oポート等のリソース管理は全部ドライバ側丸投げになっています(逆に見れば、OSに縛られず好き放題にI/Oポートアクセス出来ます)。

今回のテーマである最小構成の仮想ファイルシステムドライバの製作に当たっては、後者のLegacyドライバを採用します。 大きな理由としては、PnP特有の面倒なことを全部省略できること、WindowsNT3.xレベルの旧OSに対応できることが挙げられます。

メインコンテンツ

思った以上にボリュームがありそうなため、いくつかにページを分けています。 基本的には順番に見ていくことをおすすめします。

資料集に戻る

トップに戻る