我没有关于NT进程的概念,因为我使用的是本机API,因为它们返回的值如STATUS_TIMEOUT
,STATUS_PENDING
等。STATUS_PENDING
到底是什么意思?
我的代码是这样的。
NTSTATUS rc;
rc = NtReadFile(
Keybrds[iLoop].hKeyboard,
Keybrds[iLoop].hEvent,
NULL,
NULL,
&IoStatusBlock,
&KbData,
sizeof(KEYBOARD_INPUT_DATA),
&ByteOffset,
NULL
);
在这里,NtReadFile()
返回STATUS_PENDING
,这意味着什么?
这意味着 I/O 操作挂起,您应该等待句柄完成。这也可能意味着文件句柄以异步模式打开;如果要同步,则应在同步模式下打开句柄,以避免首先出现STATUS_PENDING
。
NtReadFile
[和ZwReadFile
]是同一Windows本机系统服务例程的两个版本。根据文档
返回值
ZwReadFile 返回STATUS_SUCCESS或相应的 NTSTATUS 错误代码。
是的,STATUS_PENDING
是返回错误代码。它被记录为
0x00000103 STATUS_PENDING 请求的操作正在等待完成。
此消息指示使用同一句柄的某些 I/O 操作已挂起。句柄可能是在异步模式下打开的,因此通过返回值 STATUS_PENDING
,调用方将等待该句柄上的持续操作完成。
如果文件句柄以异步模式打开,则NtReadFile ()
不会在句柄上等待自身。OTOH,对于具有同步模式的句柄,NtReadFile ()
将等待 [block] 直到读取操作完成。
现在,至于NTSTATUS error code
部分的详细信息,您可以查看此处。