2010-10-20 7 views
3

Использование .NET FileSystemWatcher http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx для мониторинга каталога, полного файлов для: Изменено; Создано; Удаляется; Переименованные события.FileSystemWatcher - минимальные разрешения, необходимые для целевых каталогов?

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

Кажется, что это было бы ЧИТАТЬ, но я не могу найти документально.

Благодаря

ответ

3

Основной API, является ReadDirectoryChangesW. Единственное, что упоминается в статье библиотеки MSDN для него, это то, что в дескрипторе каталога требуется право доступа FILE_LIST_DIRECTORY, и каталог должен быть открыт с помощью опции FILE_FLAG_BACKUP_SEMANTICS.

Код .NET Framework часто бывает полезен. Частные FileSystemWatcher.StartRaisingEvents() метод использует этот код, чтобы открыть дескриптор каталога:

directoryHandle = NativeMethods.CreateFile(
    directory,         // Directory name 
    UnsafeNativeMethods.FILE_LIST_DIRECTORY, // access (read-write) mode 
    UnsafeNativeMethods.FILE_SHARE_READ | 
    UnsafeNativeMethods.FILE_SHARE_DELETE | 
    UnsafeNativeMethods.FILE_SHARE_WRITE,  // share mode 
    null,          // security descriptor 
    UnsafeNativeMethods.OPEN_EXISTING,   // how to create 
    UnsafeNativeMethods.FILE_FLAG_BACKUP_SEMANTICS | 
    UnsafeNativeMethods.FILE_FLAG_OVERLAPPED, // file attributes 
    new SafeFileHandle(IntPtr.Zero, false)); // file with attributes to copy 

Используйте FILE_FLAG_OVERLAPPED только для асинхронных уведомлений.

+0

Отлично, спасибо. – glaucon

+1

В соответствии с документами вам также требуется FILE_FLAG_BACKUP_SEMANTICS (http://msdn.microsoft.com/en-us/library/aa365465%28v=vs.85%29.aspx). –

4

Если FileSystemWatcher основан на ReadDirectoryChangesW ему нужно:

  1. FILE_LIST_DIRECTORY на каталог, чтобы контролировать
  2. привилегию SeBackupPrivilege, которая позволяет владельцу читать ничего в обход проверки доступа. Показателем для этого является флаг FILE_FLAG_BACKUP_SEMANTICS для CreateFile.

Это задокументировано в описании ReadDirectoryChangesW, приведенном выше.

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