2010-03-30 3 views
6

Мне нужно знать, какой пользователь удалил файл в файловой системе из кода C#. Только одна идея заключается в использовании аудита, но она кажется очень медленной ...Как я могу получить пользователя, который удалил файл?

+0

Что это за «аудит», о котором вы говорите? – BlueMonkMN

+1

@BlueMonkMN: Это может быть так: проверка доступа NTFS - http://support.microsoft.com/kb/310399; это, пожалуй, самый простой вариант - в конце концов, это приближается к ядру, чем к пользовательскому пространству, поэтому он должен поймать все события доступа к файлу (не уверен в доступе к низкоуровневому диску, но это, вероятно, здесь не требуется). У меня нет опыта его тонкой настройки. – Piskvor

+0

Я не хочу использовать аудит, потому что у меня будет много файлов, и на самом деле это будет спам в системном журнале – user295518

ответ

2

Вы можете использовать событие FileSystemWatcher.Deleted для захвата удалений, происходящих в файловой системе.

В зависимости от приложения, вы можете в этот момент также узнать, какой пользователь вызвал это событие (он не является частью FileSystemEventArgs).

+0

. Я использую watcher, но когда я пытаюсь получить имя пользователя, вот так: System.Security.AccessControl.FileSecurity sec = new FileSecurity (Path, System.Security.AccessControl.AccessControlSections.Owner); return sec.GetOwner (typeof (System.Security.Principal.NTAccount)). Значение; выдает исключение из-за того, что он не может определить пользователя – user295518

+0

@user: Попробуйте 'WindowsIdentity.GetCurrent(). Имя' http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity. aspx –

1

Я не знаю, может ли это быть извлечено из файловой системы, но одним из возможных способов является использование объекта av FileSystemWatcher для запуска события в Deleted. Недостатком является то, что вам нужно, чтобы приложение-наблюдатель работало все время. Один из преимуществ заключается в том, что вы можете контролировать только spesific-папку, если это возможно.

+0

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

+0

Нет, но я, возможно, мог бы получить доступ через файл. Вам нужно будет получить пользователя, который изменил файл, а не владельца. Но в любом случае файл, вероятно, уже удален. Вот почему вы получаете исключение, я думаю. –

+0

Возможно, вы могли бы выяснить, как получить доступ к файловой информации о удаленном файле из этого исходного кода? http://ntfsundelete.com/downloads/ –

Смежные вопросы