Я хотел бы получить имя пользователя файла, к которому был получен доступ (добавить, удалить, переименовать, ...).
на самом деле я использую filesystemwatcher для контроля доступа к файлам и активировал доступ к объектам в каталоге для получения информации о пользователях через журналы событий. Это решение не является идеальным, поскольку файловых событий много, а сообщения журнала событий не так детализированы. есть только один идентификатор события для записи данных. это используется для добавления файла, переименования, перемещения, ... каждой записи данных. Кроме того, мне пришлось перепроверить, что сообщение журнала событий соответствует событию filesystemwatcher. Я бы предпочел справиться с этим лучше. так что я трачу много времени на гугл, чтение, ... я знаю, что есть еще один пост на stackoverflow
Получить имя пользователя открытого файла
но я думаю, что должно быть возможное решение, потому что Windows Events может получить имя пользователя.
с чтением на нескольких страницах я обнаружил, что должно быть возможное решение с использованием netapi32.dll. пример кода на
http://vbcity.com/forums/t/133307.aspx?PageIndex=2
не работает для меня мне не удалось получить fileid, поэтому я изменил код на
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 и кодом примера я не могу получить имя пользователя.