我没有得到关于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
,这意味着什么?
答案 0 :(得分:6)
means I / O操作正在等待,您应该等待句柄完成。它也可能意味着文件句柄以异步模式打开;如果你想要同步,你应该以同步模式打开句柄,而不是首先避免使用STATUS_PENDING
。
答案 1 :(得分:5)
NtReadFile
[和ZwReadFile
]是同一Windows本机系统服务例程的两个版本。根据{{3}}
返回值
ZwReadFile返回STATUS_SUCCESS或相应的NTSTATUS错误代码。
是的,STATUS_PENDING
是返回错误代码。它被记录为
0x00000103 STATUS_PENDING 请求的操作正在等待完成。
此消息表明使用相同句柄的某些I / O操作已挂起。句柄可能以异步模式打开,因此通过返回值STATUS_PENDING
,调用者将等待该句柄上正在进行的操作的完成。
如果文件句柄是在 async 模式下打开的,NtReadFile ()
将不会在句柄上等待。 OTOH,对于具有 sync 模式的句柄,NtReadFile ()
将等待[ block ],直到读取操作完成。
现在,关于NTSTATUS error code
部分的详细信息,您可以查看documentation。