アクセスしたファイルのユーザー名を取得したい (追加、削除、名前変更など)。実際には、filesystemwatcher を使用してファイル アクセスを監視し、ディレクトリでオブジェクト アクセスを有効にして、イベント ログ経由でユーザー情報を取得しました。多くのファイル イベントがあり、イベント ログ メッセージはそれほど詳細ではないため、このソリューションは完全ではありません。書き込みデータの eventd ID は 1 つだけです。これは、ファイルの追加、名前の変更、移動、...すべての書き込みデータに使用されます。さらに、イベントログ メッセージが filesystemwatcher イベントと一致することをクロスチェックする必要がありました。私はこれをよりよく処理したいと思います。だから私はグーグル、読書に多くの時間を費やしています...スタックオーバーフローに別の投稿があることを知っています
しかし、Windows イベントはユーザー名を取得できるため、可能な解決策があるはずだと思います。
いくつかのページを読んで、netapi32.dll を使用して可能な解決策があるはずであることを発見しました。http://vbcity.com/forums/t/133307.aspx?PageIndex=2のサンプル コード は機能しません。ファイルIDを取得できなかったので、コードを次のように変更しました
private ulong GetFileIdFromPath(string filePath)
{
WinAPI.BY_HANDLE_FILE_INFORMATION objectFileInfo = new WinAPI.BY_HANDLE_FILE_INFORMATION();
Thread.Sleep(200);
FileInfo fi = new FileInfo(filePath);
FileStream fs = fi.Open(FileMode.Open, FileAccess.Read, FileShare.Read);
WinAPI.GetFileInformationByHandle(fs.Handle, out objectFileInfo);
fs.Close();
ulong fileIndex = ((ulong)objectFileInfo.FileIndexHigh << 32) + (ulong)objectFileInfo.FileIndexLow;
return fileIndex;
}
このコードではファイル ID を取得できますが、ファイル ID とサンプル コードではユーザー名を取得できません。