Базовым API является ReadDirectoryChangesW.Единственное, что упомянуто в статье о библиотеке MSDN, это то, что для дескриптора каталога требуется право доступа FILE_LIST_DIRECTORY, и каталог необходимо открыть с помощью опции FILE_FLAG_BACKUP_SEMANTICS.
Код инфраструктуры .NET часто бывает полезен.Закрытый метод 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 только для асинхронных уведомлений.