Windows10におけるレガシーファイルシステムフィルタードライバーのブロック動作について

こんにちは、Windows プラットフォーム サポートの大川です。
今回は Windows10 におけるレガシー フィルター ドライバーのブロック動作のお話になります。

まずは、フィルター ドライバーについてお話したいと思います。ファイル システムへ I/O が届くまでには、
いくつかのドライバーを介して、読み取りや書き込みが行われます。フィルター ドライバーはこのドライバーの
階層に追加され、I/O の動作を変更するためのドライバーになります。

例えば、弊社製品のファイル サーバー リソース マネージャー (FSRM) にクォータという、フォルダの利用
サイズを制限する機能があります。これは、Quota.sys というフィルター ドライバーが階層に追加されること
により実現されています。対象のフォルダ内にあるファイルに対してI/O が発行された際に書き込まれるサイズ
などを参照し、制限サイズを超える場合には、この I/O をファイル システムに届く前にブロックします。
これにより、設定したサイズ以上のデータが書き込まれないようにしています。

このように I/O の動作を変更する フィルター ドライバーですが、実は 2 種類のドライバーがあります。
ミニ フィルター ドライバーとレガシー フィルター ドライバーになります。

ミニフィルター ドライバーはフィルター マネージャーというコンポーネントと連携して動作しますが、
レガシー フィルター ドライバーはこのコンポーネントを介さずに直接、ファイル システムなどの操作を行います。

現在ご利用いただいている環境のフィルター ドライバーは fltmc コマンドで確認が可能です。

// 動作しているフィルタードライバーの表示方法
=============================================================================
1) コマンド プロンプトを管理者権限で起動します。

2) 以下のコマンドを実行します。

fltmc filters

表示例)
Filter Name                          Num Instances     Altitude   Frame
------------------------------ ------------------     ------------   -----
AVLegacy                                              389998.99   <Legacy>

EncryptionLegacy                               149998.99   <Legacy>

AVMiniFilter                               3       32800         0

※レガシー フィルター ドライバーが動作している場合は、上記のように一番右に が
表示されます。それ以外は、ミニ フィルター ドライバーとして動作しています。
=============================================================================

弊社としては、ミニフィルターに属するドライバーを使用することを推奨しています。これは、直接、
ファイル システムを操作するよりも、フィルター マネージャーを介して動作した方が、Windows 内で
より親和性や危険な動作などを検知し、抑止することが可能となるためです。

Windows10 では 2016 年 8 月頃に提供を開始した Aniversary Update から、このレガシーフィルター
に属するドライバーを動作させないための機能が追加されました。この機能は既定では無効となっており、
有効にすると、レガシー フィルター ドライバーのロードをブロックするように動作します。
この動作は、レジストリの値を変更することにより変えることが可能です。

この動作について、弊社から公開させていただいている記事がありますので、参照いただければと思います。

Blocking legacy file system filter drivers
https://docs.microsoft.com/en-us/windows-hardware/drivers/ifs/blocking-file-system-filter-drivers

現在提供させていただいている Windows10 のどのバージョンにおいても、既定の動作としては、ブロックする
機能は無効となっております。

しかし、2018 年春に提供を予定している Windows10 の insider preview Build 17123 より前の Build においては、
既定の動作として、ブロックする機能が有効になっております。

※ Build 17123 以降については、現在提供させていただいている Windows10 と同様の動作 (ブロックしない) を
    するように修正されております。

もし、継続してレガシー フィルター ドライバーを利用されたい場合には、以下の手順でレジストリを変更いただければと思います。

// レガシー フィルター ドライバーの有効化手順
=============================================================================
1. コマンド プロンプトを管理者権限で起動します。

2. 以下のコマンドを実行し、有効化の項目を設定します。

reg add " HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\I/O System" /v IoBlockLegacyFsFilters /t REG_DWORD /d 0

3. 以下のコマンドを実行し、項目が追加されていることを確認します。

reg query " HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\I/O System" /v IoBlockLegacyFsFilters

表示例)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\I/O System
IoBlockLegacyFsFilters REG_DWORD 0x0

4. OS を再起動します。

5. 再起動が完了したら、ログオンし、fltmc コマンドにてレガシー フィルター ドライバーがロードされていることを確認します。
=============================================================================

弊社としては、ミニフィルター ドライバーでの利用を推奨しているため、今後、レガシー フィルター ドライバーを
既定でブロックするように変更する可能性があります。
もし、変更となる場合には、本 Blog にて情報発信させてさせていただきます。

本ブログが少しでも皆様のお役に立てますと幸いです。