- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 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_CHANGE
和 NtNotifyChangeDirectoryFile()
, 表示通知数据大于输出缓冲区可以容纳的数据。这就是 ERROR_NOTIFY_ENUM_DIR
在 ReadDirectoryChangesW()
中的含义,如它自己的文档中所述。
其他函数的一些返回值,如 WaitFor...()
函数系列和 OverlappedIO/IOCP 函数,直接映射到 STATUS_...
代码在内部,但没有这样记录,因为这是一个私有(private)的实现细节。例如,如果您查看 winbase.h,有几十个常见的返回代码,如 WAIT_OBJECT_0
、WAIT_IO_COMPLETION
、STILL_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/
我想知道特定目录的任何更改文件。所以,我想出了 ReadDirectoryChangesW() 和 FindFirstChangeNotification() - FindNextChangeNoti
最初我被链接到这个调用,这样我就可以记录对某个文件的所有访问并捕获对其的所有更改。 我已经完成了几个例子,但都失败了。甚至是msdn代码无法为我编译。 有人可以为我提供一个小的工作片段来监视文件并记录
我已经设法让 ReadDirectoryChangesW() 为我需要监视的文件夹工作。我正在使用 IO 完成例程,所有更改监视都是由一个线程完成的,该线程除了等待更改和停止信号外什么都不做。一切都很
我想监控指定目录下的修改,获取准确的修改信息。所以我决定使用 ReadDirectoryChangesW()功能。但我想异步使用它,这意味着如果目录中没有更改,我不希望我的工作线程被阻塞。 我该怎么做
简介: 我正在尝试使用 ReadDirectoryChangesW 在一个循环中异步。 下面的片段说明了我正在努力实现的目标: DWORD example() { DWORD error =
我正在使用 ReadDirectoryChangesW基于此 question 异步观察目录更改我实现了一个监视给定目录的函数,但我仍然收到错误消息 GetQueuedCompletionStatus
我使用下一个代码来了解某个文件夹中的文件何时更改: HANDLE hDir = ::CreateFile(path, FILE_LIST_DIRECTORY, FILE_SHARE_READ|FILE
我一直在尝试让 ReadDirectoryChangesW 监视子树的文件更改,但我发现我得到的结果不一致。以下是说明问题的自包含测试用例。当我运行它时,它有时会产生: A : Created C :
我已经阅读了 ReadDirectoryChangesW() 的文档,还看到了 CDirectoryChangeWatcher project ,但都没有说明为什么人们想要异步调用它。我知道 curr
我想递归地观察目录中的所有变化,即如果观察 C:\ 我想接收通知 C:\1.txt C:\A\1.txt 如果我使用启用了 watchSubtree 选项的 ReadDirectoryChanges,
我正在使用 GetQueuedCompletionStatusEx() 和 ReadDirectoryChangesW() 尝试接收对多个文件系统层次结构的更改通知。 我注意到当一次有很多更改时,我会
我正在尝试使用 ReadDirectoryChangesW API 使用 python 在 Windows 上查看目录以创建/删除/重命名更改。这是我的代码,它运行良好: results = win3
我将 ReadDirectoryChangesW (Windows API) 与 GetQueuedCompletionStatus 结合使用。如何检测可能的缓冲区溢出以了解至少一个文件系统更改事件已
我有一个应用程序必须监视特定目录中的任何更改。我使用以下代码,但是当我重命名文件时,不会触发操作 FILE_ACTION_RENAMED_NEW_NAME。实际上,触发了 UNDISCOVERED A
我正在尝试使用 ReadDirectoryChangesW 来跟踪文件创建、复制或移动到受监控目录的时间。 我的问题是,当我在受监控的目录上复制或创建文件时,ReadDirectoryChangesW
使用 ReadDirectoryChangesW 监视文件夹会导致其父级被锁定且无法删除。 这里有一篇关于这个的帖子: FindFirstChangeNotification locks parent
这是名为 JNotify 的开源项目的一部分。我正在尝试修复 Win32 实现,这真的让我抓狂。我已经阅读了 MSDN 中关于此的所有内容,并阅读了有关此糟糕 API 的所有网络帖子。我正在尝试使用完
我这样做对吗? 我正在尝试查找在名为 C:\Perl 的文件夹中发生的所有更改 在 ReadDirectoryChangesW 之后,它就卡在那里了。它没有前进。我是否遗漏了一些明显的东西? 我正在努
我调用 ReadDirectoryChangesW异步监视后台线程中的目录更改。 这是如何打开目录 ( basePath) 并启动“读取”线程的: m_hDIR = CreateFileW(
我想在一个线程中实时监控几个目录的变化,所以我决定使用与GetQueuedCompletionStatus异步的ReadDirectoryChangesW()方法。这是我的代码: static DWO
我是一名优秀的程序员,十分优秀!