.Net上のWindows OSで独自のファイルシステムを作成する

非常に多くのファイルシステムがあります。 これらは、ストレージメディア(FAT *、NTFS、ext *など)、ネットワークファイルシステム(NFS、CIFSなど)、仮想ファイルシステム、 その他多数のファイルシステムです。 %habrauser%には、存在しない独自のファイルシステムが必要でしたか? マネージコード(.net)上のWindows OSでそれを行う方法について、お話しします。



一般に、独自のファイルシステム(以下FSと呼びます)を作成するには、このFS用のドライバーを作成し、OSに登録する必要があります。 なぜなら ドライバーはOSのカーネルと対話するため、マネージコードでのドライバーの作成は重要であり、そのようなドライバーのパフォーマンスは低レベルになります。 この点で、ネイティブコードで記述されたFSドライバーと、このドライバーとマネージコードの間の中間層を用意する方が便利です。 このようなドライバーはDokanプロジェクトに存在し、マネージコードでこのドライバーと対話するためのDokanNetクラスのセットも存在します。 どちらのプロジェクトもGPLv3の下でライセンスされています。



それがどのように機能するかを理解してみましょう。





Dokanは、ユーザー空間のアプリケーションとやり取りできるWindowsカーネルレベルのドライバーです。 このドライバーは、32ビットシステムと64ビットシステムの両方に存在します。 ドライバーはFSの実装を保持しませんが、OSカーネルからユーザー空間へのすべての入出力(IO)操作を通過させるプロキシとしてのみ機能します。 FS機能の実装は私たちの肩にあり、ファイルを開く/閉じる、ファイルから読み取る、ファイルに書き込むなどの基本的なFS関数を作成します。これらは、システムで対応するイベントが発生したときにDokanドライバーによって呼び出されます。 DokanドライバーにFSを登録する時点で、FS操作のいくつかのパラメーター(入出力操作ハンドラーの数、FSのマウントポイント(Dokanはリムーバブルドライブまたはネットワークドライブとして、FSのルートのみへのマウントをサポートしています)、自動操作中にエラーが発生した場合のファイルシステムのアンマウント、およびその他のパラメーター)。 その後、OSのFSのルートに新しいディスクが表示され、通常のディスクと同様に、アプリケーションとOS自体が相互作用します。 このFSで実行できる操作は、このFSの開発者、つまり私たちだけです。



DokanNetは、Dokanドライバーのラッパーです。 マネージコードを使用して独自のFSを開発できます。 DokanNetはDokanOperationsインターフェースについて説明しています。これは、FSをDokanドライバーに登録するために実装する必要があります。 DokanNetの作成者は、プロジェクト自体のソースコードとともに、このラッパーを使用した2つの例を示します。



サンプルコードは読みやすく、Dokanドライバが提供する機能に慣れることができます。



DokanOperationsインターフェースの実装は、次の機能の実装になります。





ご覧のとおり、DokanドライバーとDokanNetラッパーが提供する機能は非常に豊富です。 このプロジェクトに基づいて、FS SSHFSが開発されました。 誰もが自分の要件を満たすFSを開発できます。 リモートHttpサーバー上のファイルをシステムにマウントできるHttpFSの開発に着手しました。 しかし、それについては次の記事で詳しく説明します...



All Articles