Winapi 取消异步ReadDirectoryChangesW命令

Winapi 取消异步ReadDirectoryChangesW命令,winapi,asynchronous,Winapi,Asynchronous,对ReadDirectoryChangesW()的异步调用可以通过CancelIo()函数取消。但是,在调用CancelIo()时,与ReadDirectoryChangesW()关联的通知缓冲区可能已填满一半。问题是,这些通知会发生什么?是否应该以正常方式处理它们 更具体地说,我用一个完成例程发出了一个重叠的ReadDirectoryChangesW()命令,然后通过CancelIo()取消了它。当调用我的完成例程时出现ERROR\u OPERATION\u ABORTED错误,我是否仍应检查

ReadDirectoryChangesW()
的异步调用可以通过
CancelIo()
函数取消。但是,在调用
CancelIo()
时,与
ReadDirectoryChangesW()
关联的通知缓冲区可能已填满一半。问题是,这些通知会发生什么?是否应该以正常方式处理它们

更具体地说,我用一个完成例程发出了一个重叠的
ReadDirectoryChangesW()
命令,然后通过
CancelIo()
取消了它。当调用我的完成例程时出现
ERROR\u OPERATION\u ABORTED
错误,我是否仍应检查通知缓冲区中可能的通知

澄清:
我的文件系统侦听器组件已经成功地为我的公司服务了十多年。现在我将修改该组件,以实现更复杂的监控策略。使用此策略,取消特定的
ReadDirectoryChangesW()
请求并不意味着取消监视,我甚至不想错过一个通知。

好的,我在实验中发现,在
ReadDirectoryChangesW()的情况下,完成例程的第二个参数(dwnumberofbytesttransfered)
函数包含写入通知缓冲区的字节数。不幸的是,我在文档中找不到对此的明确确认


然而,这个假设似乎是合理的,如果它总是正确的,我可以通过检查该参数来推断是否存在通知,而不管完成例程的第一个参数(dwErrorCode)是什么。这就解决了问题。

这真的重要吗?你取消了监控,这意味着你对它不再感兴趣了。我会完全忽略缓冲区,然后继续。@RemyLebeau,我取消了一个特定的请求,但没有取消监视,我对每个通知都感兴趣。请参阅我在问题中添加的澄清。同样,为什么这很重要?如果您取消任何I/O操作,您会告诉系统您不再关心该操作,因此您不必担心任何可能已生成的缓冲数据(部分或其他)导致取消。为什么要为要取消的某些内容关心部分数据?您能提供一个实际的用例示例吗?@RemyLebeau,我取消了特定文件句柄的I/O操作,但没有取消线程中的任何I/O操作。我不想猜测已经为一个句柄报告的通知是否会为另一个句柄重复。