fltmc.exe の使い方

皆さん、こんにちは。A寿です。

 

突然ですが、皆さんは、ATVに乗ったことはありますか?・・・このお話にご興味のある方は本文の最後の【閑話休題】までどうぞ。

 

 

さて、以前の記事で、ファイルシステムのフィルターマネージャーの概念や基本的な用語をご紹介しましたので、今回は、ミニフィルターのサンプルをインストールしてみて、 fltmc.exe でロードやアタッチをして、その状況をfltmc.exe で確認してみようと思います。

 

今回は、例として、 PassThrough ファイルシステムミニフィルタードライバー サンプルを使用します。

このサンプルは、以下から入手可能です。

 

  PassThrough File System Minifilter Driver

  https://code.msdn.microsoft.com/windowshardware/passThrough-File-System-f9975611

 

ドキュメントに従い、 Windows 8 にインストールしたという前提で以下進めます。

 

(1) 管理者権限でコマンドプロンプトを起動します。

 

    fltmc.exe は管理者権限のコマンドプロンプトでないと、アクセス拒否のエラーとなり、実行できません。

 

(2) fltmc /? を実行してオプションを確認します。

 

C:\windows\system32>fltmc /?

 

** 無効なコマンド

有効なコマンド:

    load フィルター ドライバーを読み込みます

    unload フィルター ドライバーをアンロードします

    filters 現在システムに登録されているフィルターを一覧表示します

    instances 現在システムに登録されているフィルターまたは

                ボリュームのインスタンスを一覧表示します

    volumes システム内のすべてのボリューム/RDR を一覧表示します

    attach ボリュームにフィルター インスタンスを作成します

    detach ボリュームからフィルター インスタンスを削除します

 

    特定コマンドのヘルプを表示するには fltmc help [コマンド] を実行してください

 

(3) fltmc を実行して、現在ロードされ、アタッチされているミニフィルターが表示されます。

 

    これは fltmc filters を実行した時と同じ結果です。

 

C:\windows\system32>fltmc

 

フィルター名 インスタンス数 階層 フレーム

------------------------------ ------------- ------------ -----

MpFilter 4 328000 0

luafv 1 135000 0

npsvctrig 1 46000 0

FileInfo 4 45000 0

 

    今回の例にはありませんが、レガシーフィルターも表示されます。

    インスタンス数は、各ミニフィルターがボリュームにアタッチしているインスタンスの数です。

    階層は、前回のブログで言った「高度 (階層、Altitude)」のことです。各ミニフィルターのいる高さがわかります。

    フレームは、各ミニフィルターが所属しているフレーム番号です。

 

(4) fltmc instances を実行して、各インスタンスがアタッチしているボリューム名を見ることができます。

 

C:\windows\system32>fltmc instances

フィルター ボリューム名 階層 インスタンス名 フレーム SprtFtrs Vl 状態

-------------------- ------------------------------------- ------------ ---------------------- ----- -------- --------

FileInfo 45000 FileInfo 0 00000003

FileInfo C: 45000 FileInfo 0 00000003

FileInfo E: 45000 FileInfo 0 00000003

FileInfo \Device\Mup 45000 FileInfo 0 00000003

MpFilter 328000 MpFilter Instance 0 00000003

MpFilter C: 328000 MpFilter Instance 0 00000003

MpFilter E: 328000 MpFilter Instance 0 00000003

MpFilter \Device\Mup 328000 MpFilter Instance 0 00000003

luafv C: 135000 luafv 0 00000003

npsvctrig \Device\NamedPipe 46000 npsvctrig 0 00000000

 

(5) fltmc volumes を実行してシステム内の全てのボリュームを確認できます。

 

C:\windows\system32>fltmc volumes

DOS 名 ボリューム名 ファイル システム 状態

------------------------------ --------------------------------------- ---------- --------

                                \Device\Mup Remote

C: \Device\HarddiskVolume2 NTFS

                                \Device\HarddiskVolume1 NTFS

                                \Device\NamedPipe NamedPipe

                                \Device\Mailslot Mailslot

E: \Device\HarddiskVolume3 FAT

 

(6) fltmc load passthrough を実行して passthrough.sys をロードします。

 

    fltmc load <ミニフィルター名> を実行することでミニフィルターをロードできます。

 

(7) fltmc を実行して passthrough がロードされたことを確認します。

 

C:\windows\system32>fltmc

 

フィルター名 インスタンス数 階層 フレーム

------------------------------ ------------- ------------ -----

PassThrough 4 370030 0

MpFilter 4 328000 0

luafv 1 135000 0

npsvctrig 1 46000 0

FileInfo 4 45000 0

 

    passthrough は、自動的にアタッチされるため、すでにインスタンスがあることがわかります。

    passthrough の階層は 370030 (この値は inf ファイルに記載されているのでご興味のある方はご確認ください) であり、

    既存のミニフィルターよりも高い位置に挿入されています。

 

(8) fltmc detach passthrough c: を実行し、 C ドライブから passthrough をデタッチします。

 

    この時、 fltmc を実行すると、インスタンス数が 1 つ減っていることが確認できます。

 

C:\windows\system32>fltmc

 

フィルター名 インスタンス数 階層 フレーム

------------------------------ ------------- ------------ -----

PassThrough 3 370030 0

MpFilter 4 328000 0

luafv 1 135000 0

npsvctrig 1 46000 0

FileInfo 4 45000 0

 

(9) fltmc attach passthrough c: を実行すると、再度 C ドライブに passthrough をアタッチできます。

 

    この時、 fltmc を実行すると、インスタンス数が 1 つ増え、元に戻っていることが確認できます。

 

C:\windows\system32>fltmc

 

フィルター名 インスタンス数 階層 フレーム

------------------------------ ------------- ------------ -----

PassThrough 4 370030 0

MpFilter 4 328000 0

luafv 1 135000 0

npsvctrig 1 46000 0

FileInfo 4 45000 0

 

(10) fltmc unload passthrough を実行するとアンロードできます。

 

以上、 fltmc.exe の一通りの使い方をご紹介しました。

 

ところで、fltmc は、自分でミニフィルタードライバーを開発していない場合でも、システムに問題があった際の切り分け作業に使える場合があります。例えば、ウィルス対策ソフトなど、どのようなファイルシステムフィルタードライバーが入っているか確認できます。そのため、自分の開発しているソフトウェアと、インストール済みのミニフィルターとの組み合わせで、何らかの問題が起こっていそうな場合に、どのドライバーをアンインストールしていくと問題が起きなくなるかを確認することができます。

 

お役に立てば幸いです。

 

――――――――――――――――

【閑話休題】突然ですが、皆さんは、ATVに乗ったことはありますか?

 

私は昨年の秋ごろに初めて乗りました。・・・というか、読者の方は、「そもそも ATV って何やねん」とお思いになるでしょうか。

 

・・・いいえ、カードを入れると残高がわかったり、お金が出てきたりするアレではありません。それは ATM です。

 

ATV とは悪路でも走れる四輪バギーのことで、 All Terrain Vehicle の略らしいです。私が ATV に乗るために参加した教室で、クイズに出ましたので、今後 ATV に挑戦される方は覚えておくとよいかもしれません。

 

さて、四輪バギーに乗った時の話です。参加者は、僕と友人たち以外は、一組のカップルだけでした。最初は、バギーを駐車しているところから舗装された山道にかけての部分を使って、アクセルやブレーキのかけかた、前進やバックの仕方などを練習しました。その時、安全上最も重要なこととして、どんなにバランスを崩しても、自転車でバランスを崩した時のような感じで、足を地面におろすということはしてはいけないと習いました。これは、足を地面に着いた時に、バギーが傾いた状態で足に重量がかかると、骨折しかねないためだったかと記憶しています。

 

これらの練習が一通り終わった後、舗装されていない山道をどんどん登って行きました。私たちの先頭は、カップルのうちの男性で、その後に女性が続き、その後ろに私と友人が続いていました。なぜか女性の運転するバギーだけ、ずっと調子が悪かったのか、山道を運転している間、女性のバギーだけ、どんどん山道の穴ぼこの方にばかりはまり、なかなか進みませんでした。参加している男性陣は、斜面で止まる時はむしろ適度にアクセルをふかすことだけ習っていたため、誰も駐車したり、降りたりすることなく、全く手を貸しませんでしたが、なんとかこの女性は前に進んでいました。その時でした。女性がバランスを崩して、まるで自転車でバランスを崩した時のように、足をつきました! でもすぐに足を戻したのと、バギー自体が安定していたので、無事でしたが、一瞬ヒヤッとしました。

 

その後、山道をある程度登ると、少し開けた練習場がありました。そこで、倒れた木の下をくぐったり、割と急な斜面に片輪を突っ込んでそちらに体重をかけて駆けのぼったり、バックして切り替えしたり、でこぼこ道を進んだり、といった練習を繰り返しました。斜面に片輪を突っ込んでかけのぼるのは、結構見た目的に危なく見えるし、やる前は少しビビったりして、あまり登れなかったりもするのですが、さっきの目の前で足を着かれるほどヒヤッとすることはありませんでした。皆様も、 ATV に乗る時は足を地面につかないようにご注意ください。