我想获取访问文件的用户名(添加、删除、重命名......)。实际上,我使用 filesystemwatcher 来监视文件访问,并且我已经激活了对目录的对象访问,以通过事件日志获取用户信息。这个解决方案并不完美,因为文件事件很多,并且事件日志消息没有那么详细。写入数据只有一个事件 id。这用于添加文件,重命名,移动,......每次写入数据。此外,我必须交叉检查 eventlog 消息是否与 filesystemwatcher 事件匹配。我宁愿更好地处理这个问题。所以我花了很多时间谷歌搜索,阅读,......我知道在stackoverflow上还有另一篇文章
但我认为应该有一个可能的解决方案,因为 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;
}
使用此代码,我可以获取 fileid,但使用 fileid 和示例代码,我无法获取用户名。