gpt4 book ai didi

buffer-overflow - ReadDirectoryChangesW:异步使用时如何检测缓冲区溢出?

转载 作者:行者123 更新时间:2023-12-04 06:06:04 27 4
gpt4 key购买 nike

我将 ReadDirectoryChangesW (Windows API) 与 GetQueuedCompletionStatus 结合使用。如何检测可能的缓冲区溢出以了解至少一个文件系统更改事件已丢失?

最佳答案

使用 ReadDirectoryChangesW 时异步,您将获得第一组事件,然后您必须再次调用它以获得更多事件。事件多于缓冲区的容量并不是错误。有更多的事件超出操作系统级缓冲区的容量是错误条件,您会发现如下:

  • 发生了一些事件。
  • ReadDirectoryChangesW 启动的异步操作成功完成。您的缓冲区已填满,您的事件句柄已设置或 IOCP 已触发。
  • 发生其他事件,这些事件存储在操作系统级别的缓冲区中。
  • 还会发生更多额外的事件,这些事件会溢出操作系统级别的缓冲区。这不会改变已在步骤 2 中成功的重叠操作的状态。
  • 您等待事件句柄,或处理 IOCP,然后发现已完成的 OVERLAPPED 调用。
  • 您调用ReadDirectoryChangesW再次开始异步重叠操作,检查自步骤 2 以来发生的任何事件。此调用同步失败,GetLastError() == ERROR_NOTIFY_ENUM_DIR , 或成功 dwBytesTransferred == 0 , 自 the documentation says this also means to re-enumerate the directory

  • If the number of bytes transferred is zero, the buffer was either too large for the system to allocate or too small to provide detailed information on all the changes that occurred in the directory or subtree. In this case, you should compute the changes by enumerating the directory or subtree.

    关于buffer-overflow - ReadDirectoryChangesW:异步使用时如何检测缓冲区溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8343694/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com