Основной 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 только для асинхронных уведомлений.
Отлично, спасибо. – glaucon
В соответствии с документами вам также требуется FILE_FLAG_BACKUP_SEMANTICS (http://msdn.microsoft.com/en-us/library/aa365465%28v=vs.85%29.aspx). –