gpt4 book ai didi

c++ - GetQueuedCompletionStatusEx(), ReadDirectoryChangesW()

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:39 26 4
gpt4 key购买 nike

我正在使用 GetQueuedCompletionStatusEx()ReadDirectoryChangesW() 尝试接收对多个文件系统层次结构的更改通知。

我注意到当一次有很多更改时,我会收到错误为 0x10C 的完成数据包。此错误代码不在我包含的头文件中的任何位置,也不在文档中 ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa365465(v=vs.85).aspx )。稍后深入挖掘,我发现它是在 ntstatus.h 中定义的 STATUS_NOTIFY_ENUM_DIR。文档中既没有提到 STATUS_NOTIFY_ENUM_DIR,也没有必要包含 ntstatus.h。 MSDN 表明它应该是 ERROR_NOTIFY_ENUM_DIR。所以我想知道,这是文档中的错误还是我做错了什么?

最佳答案

ERROR_NOTIFY_ENUM_DIR 在 winerror.h 中定义:

//
// MessageId: ERROR_NOTIFY_ENUM_DIR
//
// MessageText:
//
// A notify change request is being completed and the information is not being returned in the caller's buffer. The caller now needs to enumerate the files to find the changes.
//
#define ERROR_NOTIFY_ENUM_DIR 1022L

但是,1022 是 0x3FE。 0x10C 是 268,这不是 ReadDirectoryChangesW() 应该返回的错误代码。因此,如果 ReadDirectoryChangesW() 直接返回 STATUS_NOTIFY_ENUM_DIR 而不是将其转换为 ERROR_NOTIFY_ENUM_DIR,那么这很可能是 内部的错误ReadDirectoryChangesW() 本身,除非它是 winerror.h 中的拼写错误。

STATUS_NOTIFY_ENUM_DIR 被一些较低级别的系统使用,例如 NT_TRANSACT_NOTIFY_CHANGENtNotifyChangeDirectoryFile() , 表示通知数据大于输出缓冲区可以容纳的数据。这就是 ERROR_NOTIFY_ENUM_DIRReadDirectoryChangesW() 中的含义,如它自己的文档中所述。

其他函数的一些返回值,如 WaitFor...() 函数系列和 OverlappedIO/IOCP 函数,直接映射到 STATUS_... 代码在内部,但没有这样记录,因为这是一个私有(private)的实现细节。例如,如果您查看 winbase.h,有几十个常见的返回代码,如 WAIT_OBJECT_0WAIT_IO_COMPLETIONSTILL_ACTIVE 和各种 EXCEPTION_...,直接映射到 STATUS_... 值。

不过,在这种情况下似乎并非如此。 According to MSDN , STATUS_NOTIFY_ENUM_DIR 确实应该映射到 ERROR_NOTIFY_ENUM_DIR,所以这看起来是一个错误:

When a kernel-mode driver is called because of an input/output (I/O) request from the Win32 subsystem, the status code returned by the kernel- mode driver will be translated to the status code's corresponding Win32 error code. The following table shows the mapping from the Windows NT status codes to Win32 error codes.

WINDOWS NT STATUS CODE                  WIN32 ERROR CODE
------------------------------------------------------------------
...
STATUS_NOTIFY_ENUM_DIR ERROR_NOTIFY_ENUM_DIR
...

关于c++ - GetQueuedCompletionStatusEx(), ReadDirectoryChangesW(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14801950/

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