ReadDirectoryChangesW()
函数可以取消对CancelIo()
的异步调用。但是,在调用CancelIo()
时,与ReadDirectoryChangesW()
关联的通知缓冲区可能会被填充一半。问题是,这些通知会发生什么?它们应该以正常方式处理吗?
更具体地说,我发布了一个带有完成例程的重叠ReadDirectoryChangesW()
命令,而不是通过CancelIo()
取消它。当我的完成例程被调用ERROR_OPERATION_ABORTED
错误时,我是否仍应检查通知缓冲区是否有可能的通知?
澄清:
我的文件系统监听器组件已成功为我的公司服务已超过十年。现在我要修改组件以实现更复杂的监控策略。使用此政策,取消特定的ReadDirectoryChangesW()
请求并不意味着取消监控,我甚至不想错过任何一个通知。
答案 0 :(得分:0)
好的,我通过实验发现,在ReadDirecoryChangesW()
函数的情况下,完成例程的第二个参数(dwNumberOfBytesTransfered)包含写入通知缓冲区的字节数。不幸的是,我没有在文档中找到明确的确认。
然而,这个假设似乎是合理的,如果它总是正确的,我可以通过检查该参数来得出通知的存在,无论完成例程的第一个参数(dwErrorCode)如何。这解决了这个问题。