特定の時間にのみ少数の人にアクセス許可を付与したい共有フォルダーがあります.つまり、彼らがフォルダーにアクセスしようとしている間、私は自分の希望に基づいて許可または拒否できるはずです.要するに、そのランタイムアクセスWindows に既に存在する静的アクセス制御ではありません。そのようなexeをフックする規定はありますか? 私はC#.netでそれを行うことを好みます
4 に答える
そのようなタスクを達成するには、NTFS の ACL を使用します。はい、「ハードコード」されており、誰かがファイルにアクセスしている間は変更できません。しかし、あなたが好きなものに基づいて動的に ACL を変更する Windows サービスを書くことができます。
したがって、ACL を変更するプログラムを作成すると、Windows が残りの作業を行います。C# でこのようなタスクを実行するいくつかの例は、ちょっとした Google 検索で見つけることができます。
- http://weblogs.asp.net/cumpsd/archive/2004/02/08/69403.aspx
- http://blog.crowe.co.nz/blog/archive/2007/08/25/c---設定例-NTFS-ディレクトリ--File.aspx
- ...
アップデート
アクセス許可を付与または拒否するには、ルール セットが必要です。これらのルールはアプリケーション内で確認でき、これにより NTFS アクセス許可が設定されます。何が欠けている?
「ユーザーがファイル/フォルダー foo にアクセスしています。どうすればよいですか?」というイベントを取得するためのこの簡単な方法がないかもしれません。ただし、毎秒 (必要に応じて) またはイベント (ファイル/フォルダーの作成、コピー、削除、名前の変更、特定の日付/時刻の到達) に応じて新しいルール セットを生成し、それを ACL に焼き付けることができます。終了した。
更新(再度)
@Ravisha: しかし、アクセスを許可または拒否する場合、ルールはいつわかりますか? これらのルールは事前に定義されています。
ユーザー X は午前 8 時から午後 15 時までしかアクセスできない、またはファイル y が存在する (またはファイル y に特別な何かが書き込まれている) 場合にのみアクセスできるとします。これらすべてのルールについて、プログラムを作成する必要があります。このプログラムは、「x が y にアクセスしようとしています」というイベントが発生した場合、ルールを評価しません。代わりに、定期的に (1 分に 1 回など)、またはその他のイベント (ファイル rules.config が変更された) でルールを確認します。次に、ルールに従って NTFS アクセス許可を変更します。
たぶん、これは完璧な解決策ではありません。しかし、Windows 内で実行できる最も簡単な方法です。難しい方法でやりたい場合は、File System Filter Driversを参照してください。しかし、これは難しい作業であり、マネージ コードとはほど遠いものです。
おそらく、autorun.infファイルを含めることができます。このファイルは、エクスプローラーウィンドウを開いたり閉じたりするフォルダーでアプリを実行し、誰かが立ち入ることを許可されていないときに上に移動します。詳細はこちらをご覧ください
The access control is checked when a user tries to perform a file operation on a file in the folder, so you should not need to have any additional run-time checks.
Also, Windows doesn't include a "hook" facility to allow or deny access to a folder by running a program when access is attemped.
ルートキットにできるなら、あなたにもできます。でも、あなたはそこに行きたいとは思わない。
すべてのドキュメントを、自分で制御できる拡張子を持つある種のファイルに入れてみませんか。ファイルをダブルクリックすると、winzip/explorer/... のようなインターフェイスがキャビネット内のファイルへのアクセスを提供しますが、必要な場合のみです。