L'API sous-jacente est ReadDirectoryChangesW. La seule chose mentionnée dans l'article MSDN Library est que le droit d'accès FILE_LIST_DIRECTORY est requis sur le handle de répertoire et le répertoire doit être ouvert avec l'option FILE_FLAG_BACKUP_SEMANTICS.
Le code du framework .NET est souvent utile. La méthode FileSystemWatcher.StartRaisingEvents privée() utilise ce code pour ouvrir la poignée de répertoire:
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
Utilisez FILE_FLAG_OVERLAPPED uniquement pour les notifications asynchrones.
Très bien, merci. – glaucon
Selon les docs, vous avez également besoin de FILE_FLAG_BACKUP_SEMANTICS (http://msdn.microsoft.com/en-us/library/aa365465%28v=vs.85%29.aspx). –