8

ファイル操作がなんらかの方法で呼び出された場合 (open または close など)、要求がオペレーティング システムによって処理される前にそれを処理し、可能であれば.NETによってキャンセルすることは可能ですか? .NET にそのような機能がない場合、どうすればこれを行うことができますか?

4

4 に答える 4

6

あなたがしたいことはできる。たとえば、ウイルス スキャナは常にこれを実行します。Process Monitorを使用すると、ファイルのアクティビティを簡単に監視できます。FileSystemWatcher Classを使用して、C# でプログラム的に実行することもできます。しかし、プログラムが開かないようにしたり、プログラムがファイルにアクセスするのを止めようとしたりすることは、C# ではできません。C または C++ のいずれかを使用する必要があります。File System Filter Driverを作成する必要があります。構築するのは複雑なことですが、まさに必要なものです。MSDN を引用するには:

A file system filter driver intercepts requests targeted at a file system or another file system filter driver. By intercepting the request before it reaches its intended target, the filter driver can extend or replace functionality provided by the original target of the request. Examples of file system filter drivers include anti-virus filters, backup agents, and encryption products.

于 2012-05-10T21:50:07.663 に答える
3

必要に応じて、Windows API をフックできます。.NET/C# でこれを行うには、次の方法を確認してください。

EasyHook Windows API

于 2012-05-10T20:21:50.767 に答える
2

Sysinternals は Process Monitor と呼ばれる無料のツールを提供しています。このツールの機能の 1 つは、任意の Windows プロセス (.NET アプリケーションを含む) にアタッチし、ファイルのオープン、クローズ、読み取りなどのシステム コールをキャプチャすることです。

Process Monitor Download Pageからダウンロードできます。

編集

あなたの質問を読み直すと、そのような操作を傍受し、場合によってはキャンセルすることについて質問していることがわかります。FileSystemWatcherファイル操作を一方的にキャンセルできるとは思いませんが、クラスが最善の策になると思います-呼び出し元に操作を中止するように通知するために、ある種の協調メカニズムを構築する必要があります。

于 2012-05-10T20:46:42.713 に答える
1

その種の操作でカーネルに入る必要があると確信しています。それは、Cでコーディングする必要があることを意味すると確信しています。ファイルシステムドライバーを見てください。

更新: このSO リンクが役立つ場合があります。

更新: Windows ファイル システム ドライバーの Google 検索を追加しました

また、Windows ファイル システム ドライバーの開発を始めるのに適したリソースは何ですか?

于 2012-05-10T21:43:18.563 に答える