STATUS_PENDING是什么意思?

son*_*pta 1 c windows operating-system native nt-native-api

我没有收到关于NT进程,因为我使用他们正在返回像值的本地APIs.Since概念STATUS_TIMEOUT,STATUS_PENDINGetc.What不STATUS_PENDING究竟意味着什么?

我的代码是这样的.

NTSTATUS rc;
rc = NtReadFile(
                            Keybrds[iLoop].hKeyboard,
                            Keybrds[iLoop].hEvent,
                            NULL,
                            NULL,
                            &IoStatusBlock,
                            &KbData,
                            sizeof(KEYBOARD_INPUT_DATA),
                            &ByteOffset,
                            NULL
                            );
Run Code Online (Sandbox Code Playgroud)

在这里,NtReadFile()回归STATUS_PENDING,这意味着什么?

Joh*_*nck 6

意味着 I/O操作正在等待,您应该等待句柄完成.它也可能意味着文件句柄以异步模式打开; 如果你想要同步,你应该在同步模式下打开句柄,而不是首先避免STATUS_PENDING.


Sou*_*osh 5

NtReadFile[和ZwReadFile]是同一Windows本机系统服务例程的两个版本.根据文档

返回值

ZwReadFile返回STATUS_SUCCESS或相应的NTSTATUS错误代码.

是的,STATUS_PENDING是一个返回错误代码.它被记录为

0x00000103 STATUS_PENDING请求的操作正在等待完成.

此消息表明使用相同句柄的某些I/O操作已挂起.句柄可能以异步模式打开,因此通过返回值STATUS_PENDING,调用者将等待该句柄上正在进行的操作的完成.

如果文件句柄在异步模式下打开,NtReadFile ()则不会在句柄上等待.对于具有同步模式的句柄,OTOH NtReadFile ()将等待[ 阻塞 ]直到读取操作完成.

现在,关于NTSTATUS error code部分的细节,你可以看看这里.