首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetQueuedCompletionStatusEx()、ReadDirectoryChangesW()

GetQueuedCompletionStatusEx()、ReadDirectoryChangesW()
EN

Stack Overflow用户
提问于 2013-02-11 03:55:32
回答 1查看 1.1K关注 0票数 2

我正在使用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。所以我想知道,这是文档中的错误还是我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-11 04:28:02

ERROR_NOTIFY_ENUM_DIR在winerror.h中定义:

代码语言:javascript
复制
//
// 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中的输入错误。

一些较低级别的系统(如NT_TRANSACT_NOTIFY_CHANGENtNotifyChangeDirectoryFile() )使用STATUS_NOTIFY_ENUM_DIR来指示通知数据超出了输出缓冲区所能容纳的范围。这就是ERROR_NOTIFY_ENUM_DIRReadDirectoryChangesW()中的含义,正如它自己的文档所述。

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

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

由于Win32子系统的输入/输出(I/O)请求而调用内核模式驱动程序时,内核模式驱动程序返回的状态代码将转换为状态代码对应的Win32错误代码。下表显示了从Windows NT状态代码到Win32错误代码的映射。

状态代码WIN32错误代码WINDOWS ...STATUS_NOTIFY_ENUM_DIR ERROR_NOTIFY_ENUM_DIR ...

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14801950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档