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_...
кодов внутри, но не документированы как таковые, потому что это частная деталь реализации. Например, если вы посмотрите в winbase.h, есть несколько десятков общих кодов возврата, таких как WAIT_OBJECT_0
, WAIT_IO_COMPLETION
, STILL_ACTIVE
и различные EXCEPTION_...
, которые имеют прямое значение STATUS_...
.
Это не похоже на ситуацию в этой ситуации. According to MSDN, STATUS_NOTIFY_ENUM_DIR
действительно должен сопоставить ERROR_NOTIFY_ENUM_DIR
, так что это казалось бы, ошибка:
Когда драйвер режима ядра называется из-за запроса ввода/вывода (I/O) из подсистемы Win32 , код состояния, возвращаемый драйвером режима ядра, будет переведен в соответствующий код ошибки Win32 кода состояния. В следующей таблице показано отображение из кодов состояния Windows NT кодов ошибок Win32.
WINDOWS NT STATUS CODE WIN32 ERROR CODE
------------------------------------------------------------------
...
STATUS_NOTIFY_ENUM_DIR ERROR_NOTIFY_ENUM_DIR
...
Звуки для меня, как вы проверяете на наличие ошибок, когда вы на самом деле не получить обратный сбой кода. Не вызывайте GetLastError(), если GetQueuedCompletionStatus() не возвратил FALSE. –
@HansPassant, это код ошибки, который передается с пакетом завершения ввода-вывода в lpOverlapped-> Internal. – inetknght
Yuck, не смотрите на это. –