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 にて情報発信させてさせていただきます。
本ブログが少しでも皆様のお役に立てますと幸いです。