Ciao,
Che metodo usi per ricevere la notifica del completamento asincrono? La GetOverlappedResult, la GetQueuedCompletionStatus o passi un puntatore alla completion routine? Se hai creato un evento unico mi pare di capire che stai cercando di usare la prima delle tre...
L'handle alla directory, inoltre, lo ottieni in maniera corretta con la CreateFile? Ricorda di specificare il FILE_FLAG_OVERLAPPED tra i flag.
La ReadDirectoryChanges ritorna sempre e comunque... la ricezione delle informazioni al cambiamento sono demandati ad uno dei metodi che ti ho menzionato (ovviamente, se la ReadDirectoryChanges non ritornasse subito non sarebbe più una cosa asincrona). Durante una fase di polling dovrai usare la GetOverlappedResult e controllarne il risultato (in caso di un'operazione in corso di esecuzione, otterrai FALSE e un ERROR_IO_PENDING in GetLastError, altrimenti ottieni TRUE). Quando la GetOverlappedResult ha terminato, i dati dovrebbero essere disponibili nel buffer...
Ciaociao