6

Windows のFile System Filter Driversを見てきました。この「FsFilter」の例から始めました。

http://www.codeproject.com/Articles/43586/File-System-Filter-Driver-Tutorial

努力の結果、64 ビット Win8 から 32 ビット WinXP まですべてで動作するバージョンをビルドしてサインインすることができました。 (まあ、 .SYS ファイルに署名するために Microsoft に $250 を支払わなかったので、テスト証明書を受け入れるように実行する限り. :-/)Bcdedit.exe -set TESTSIGNING ON

ここで、FsFilter を変更したいと思います。特定の種類のファイルへの書き込みアクセスをフィルターでトラップしたいと考えています。次に、ユーザーがアクセスを許可または拒否できるダイアログ ボックスを受け取るようにします。

おそらく明らかに...カーネル モード コードは UI を表示できません。ユーザーモードプロセスにシグナルを送る必要があり、(任意の潜在的な期間の後) ユーザーの希望をドライバーに通知します。 User-Mode Interactions: Guidelines for Kernel-Mode Drivers を少し調べました( .DOC ではなく、Google の Cache as HTMLです)。

これを攻撃する最善の方法が何であるかはわかりません。私が調べた唯一の例は、SysInternals FileMon です。インストールされるドライバーは、WM_TIMER ループに従って .EXE によって定期的に要求されるバッファーにデータを収集します。

// Have driver fill Stats buffer with information
if ( ! DeviceIoControl( SysHandle, IOCTL_FILEMON_GETSTATS,
            NULL, 0, &Stats, sizeof Stats,
            &StatsLen, NULL ) )
{
    Abort( hWnd, _T("Couldn't access device driver"), GetLastError() );
    return TRUE;
}

同様の手法を使用する必要がありますか? おそらく、フィルター ドライバーは、確認する要求を受信すると、2 つの HEVENT を含むバッファーに要求を追跡するためのレコードを配置できます。次に、これら 2 つの HEVENT で WaitForMultipleObjects を実行します。これは、アクセスを許可するかどうかについて、ユーザー モードから "YES" または "NO" のシグナルが送信されたことを表します。

(ユーザー モードで実行されている) 監視プロセスは、定期的に、カスタム IOCTL を使用して別のスレッドからドライバーをポーリングします。フィルター ドライバーは、要求情報と、要求が待機している 2 つの HEVENT を返します。モニターはユーザーのフィードバックを待ち、利用可能な場合は適切なイベントを通知します。

このモデルを逆にすることもできます。ユーザー モード コードは、カスタム IOCTL を使用して、ドライバーによって通知される HEVENT などのデータを渡し、ある種の安全なプロトコルを実装するだけです。これにより、ポーリングの必要がなくなります。

基本的には、方法に関するガイダンス、または Web 上の実際の例を探しているだけです! また、非同期ファイル アクセスの仕組みについても知りたいと思います。チェックされている非同期呼び出しを行うクライアントが実行を継続し、要求が終了するのを待っているときにのみ保留される方法があると思います...?


(注: フィルターをビルドしてデバッグする過程で、"miniFilters" を介した最新の手法がいくつかあることを知りました。これは、フィルター マネージャー モデルと呼ばれるものの一部です。しかし、今のところ、私はそれほど心配していません。レガシーモデルがサポートされている限り.とにかく似ています.)

4

1 に答える 1

1

あなた(別名私)は可能性をほとんど列挙しました。FileMon の方法でポーリングするか、イベントを渡します。イベントを渡すと、おそらくもう少しエラーが発生しやすくなります。スレッドの専門家でない場合は、おそらくエラーが発生する可能性が高くなります。しかし、多くの間違いを犯す傾向がある場合は、デバイス ドライバーは適していない可能性があります。スカイ ダイビングも不適切な選択かもしれません。

このプロジェクトを見てみましょう。ただし、README の免責事項に注意してください。(あくまでテストと調査です) :

https://github.com/hostilefork/CloneLocker

はい、Microsoft とそのドライバー モデルが懸念事項である限り、最近では miniFilters の方が適しています。

于 2014-04-30T07:31:03.127 に答える