取消异步ReadDirectoryChangesW命令

时间:2016-02-22 18:36:34

标签: winapi asynchronous

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

更具体地说,我发布了一个带有完成例程的重叠ReadDirectoryChangesW()命令,而不是通过CancelIo()取消它。当我的完成例程被调用ERROR_OPERATION_ABORTED错误时,我是否仍应检查通知缓冲区是否有可能的通知?

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

1 个答案:

答案 0 :(得分:0)

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

然而,这个假设似乎是合理的,如果它总是正确的,我可以通过检查该参数来得出通知的存在,无论完成例程的第一个参数(dwErrorCode)如何。这解决了这个问题。