используйте класс FileSystemWatcher для документирования пользователя, который вносит изменения

У меня есть консольное приложение, которое проверяет изменения, происходящие в файловой системе. Я пытаюсь выяснить, можно ли получить имя пользователя, который вносит изменения?


person MDL    schedule 27.12.2011    source источник
comment
Это невозможно, вся информация о процессе и его учетной записи пользователя будет потеряна к тому времени, когда файловая система увидит изменения.   -  person Hans Passant    schedule 28.12.2011
comment
С некоторым модулем системного уровня это может быть возможно, но не с С# AFAIK.   -  person Yahia    schedule 28.12.2011
comment
@MDL - Примерно неделю назад был задан вопрос, когда кто-то пытался выполнить то же самое, прочитав журнал аудита Windows. Я не знаю, получили ли они когда-либо свой ответ, но вы можете попытаться связаться с ними. Вот ссылка на их вопрос: stackoverflow.com/questions/8619503/   -  person M.Babcock    schedule 28.12.2011
comment
Вы смотрели на что-то вроде SharePoint, поскольку @Darin подтверждает, что невозможно узнать, кто изменил документ? SharePoint записывает, кто и может быть настроен для контроля версий + целый ряд других полезных функций.   -  person Kane    schedule 28.12.2011
comment
@MDL Возможно, вам следует подумать о реализации сервера WEBDAV, он основан на http, и Windows (›XP) может видеть его как share Например, webdavsystem.com/server   -  person L.B    schedule 28.12.2011


Ответы (3)


Лучше включить аудит папки.

Щелкните папку правой кнопкой мыши, выберите «Свойства» > вкладка «Безопасность» > «Дополнительно» > вкладка «Аудит». Существуют варианты записи журнала аудита событий, происходящих в этой папке.

person Joe White    schedule 27.12.2011
comment
К сожалению, это потребует от меня повышенных разрешений для доступа к вкладке «Аудит». - person MDL; 28.12.2011

Нет, это невозможно, файловая система NTFS или FAT, которую использует Windows, не записывает эту информацию. Лучшее, что вы можете узнать о файле, это когда он последний раз был изменен.

person Darin Dimitrov    schedule 27.12.2011
comment
Даже если я подключен к домену? - person MDL; 28.12.2011
comment
@MDL, домен не имеет ничего общего с тем, как файлы хранятся в ОС Windows, которая является NTFS или FAT, которая, как я уже говорил в своем ответе, не записывает эту информацию. Извиняюсь. Вы можете знать когда, но не кто. - person Darin Dimitrov; 28.12.2011
comment
Контроллер домена, конечно же, не имеет ни малейшего представления об этих изменениях. Могли бы вы представить, что все дополнительные метаданные передаются на машине даже при умеренной нагрузке? - person user7116; 28.12.2011
comment
@MDL, нет, нет. Ну, в практическом случае нет. Вы всегда можете написать свою собственную файловую систему, которая записывает эту информацию, но с практической точки зрения ее нет. - person Darin Dimitrov; 28.12.2011
comment
@MDL Это не имеет ничего общего с доменом ... это просто то, как работает система ... ядро ​​​​очевидно знает, какой процесс / пользователь обращается / изменяет / записывает файл, но эта информация не передается в файловую систему ... и это определенно не передается из файловой системы в файловую систему... - person Yahia; 28.12.2011
comment
@MDL Единственный обходной путь - написать некоторый модуль уровня ядра, который находится между любым процессом, обращающимся к файловой системе, и кодом файловой системы на стороне ядра - это возможно, но НЕ из C # . - person Yahia; 28.12.2011
comment
видел этот вопрос раньше, и это возможно, но ему придется посмотреть на реализацию/использование WMI, а также на захват или написание кода soem, чтобы получить пользователя домена. - person MethodMan; 28.12.2011
comment
@MDL ... или драйвер фильтра файловой системы - person Eugene Mayevski 'Callback; 28.12.2011

Вы не можете сделать это асинхронно с FileSystemWatcher, однако вы можете сделать это синхронно с помощью драйвера фильтра файловой системы. Драйвер позволяет получить имя пользователя учетной записи, выполняющей операцию.

person Eugene Mayevski 'Callback    schedule 28.12.2011