2017-03-10 2 views
1

共有ネットワークフォルダ(NAS)を監視するWindowsサービスを構築しました。私は、フォルダが作成、名前変更、削除されたときにログをイベントビューアに書き込むことができました。私の最終目標は「誰が作成したのか、名前を変更したのか、削除したか」で、ユーザー名またはLanIDをイベントビューアのログに含めることです。C#filesystem watcher - イベントをトリガしたユーザーを見つけよう

私は、次のステップにアプローチする方法についてのリードを探しています。以下は私の現在のコードです。所有者が(それゆえクリエーター?)ファイルのある人、これは完全にあなたの問題を解決しますが、あなたが得ることができるかもしれ場合

public partial class NasFolderMonitor : ServiceBase 
{ 
    public const string MyServiceName = "NASFolderWatcher"; 
    private System.Diagnostics.EventLog eventLog; 

    public NasFolderMonitor() 
    { 
     InitializeComponent(); 

     eventLog = new System.Diagnostics.EventLog(); 
     eventLog.Source = "NasMonitorLog"; 
     eventLog.Log = "NasMonitorLog"; 
    } 

    public void NASFolderWatcher() 
    { 
     if (!EventLog.SourceExists("NasMonitorLog")) 
     { 
      EventLog.CreateEventSource("NASFolderWatcher", "NasMonitorLog"); 
     } 

     // Create a new FileSystemWatcher with the path 
     FileSystemWatcher NasWatcher = new FileSystemWatcher("Share Path here"); 
     NasWatcher.IncludeSubdirectories = true; 
     NasWatcher.Changed += new FileSystemEventHandler(OnChanged); 
     NasWatcher.Created += new FileSystemEventHandler(OnChanged); 
     NasWatcher.Deleted += new FileSystemEventHandler(OnChanged); 
     NasWatcher.Renamed += new RenamedEventHandler(OnChanged); 

     // Begin watching 
     NasWatcher.EnableRaisingEvents = true; 
    } 

    protected override void OnStart(string[] args) 
    { 
     NASFolderWatcher(); 
     eventLog.WriteEntry("Monitoring Started"); 
    } 

    protected override void OnStop() 
    { 
     eventLog.WriteEntry("Monitoring Stopped"); 
    } 

    public void OnChanged(object source, FileSystemEventArgs e) 
    { 
     WatcherChangeTypes wct = e.ChangeType; 
     eventLog.WriteEntry(e.ChangeType.ToString() + "-" + e.FullPath); 
    } 
} 
+1

、と私は正直にそれはWindowsで行うのかどうかはわかりませんが、あなたはのSysinternalsプロセスモニターユーティリティを見てみたいことがありヒントのために。 –

+0

Windows監査ポリシーが役立ちます。 http://www.techotopia.com/index.php/Auditing_Windows_Server_2008_File_and_Folder_Access –

+0

@ JianpingLiu監査ポリシーは、障害イベントのみのグループポリシーで既に設定されているため、追加できません。それは本当にここで私を助けません。監査ポリシー以外の方法はありませんか? –

答えて

0

わからない/フォルダなど私はNASが実行されていますが、以下にしようとしないでくださいコードは、それがローカルマシン上で動作します。これは、.NETから直接行うことはできません

var fi = new System.IO.FileInfo(@"c:\temp\client_id.json"); 
var ac = fi.GetAccessControl(); 
var user=ac.GetOwner(typeof(System.Security.Principal.NTAccount)); 

Console.WriteLine(user.Value); 
+0

私の主な目標は、既存のフォルダとファイルを保護することです。フォルダやファイルを作成することは、他のモニタフィルタと共に追加したいことです。任意のユーザーが任意のタイプの変更を行ったときに、フォルダを監視してイベントを作成できる他のアイデアを提供できますか? –

+0

ドメインコントローラをお持ちの場合、私はあなたの最善の策は、人々が変更や削除を行うことができないように、アクティブなディレクトリにこのようなものを設定することだと思います。 – TheVillageIdiot

+0

私たちは、そのNAS共有場所にアクセスできる異なるユーザーグループがいて、高度を変更するオプションに本当に触れていない場所にいます。代わりに、変更を加えたかどうかを尋ねるすべてのユーザーに手を差し伸べることが難しいため、実際に誰が変更を行っているかを確認したいと考えています。 –

関連する問題