STATUS_PENDING是什么意思?

时间:2015-01-06 06:40:18

标签: c windows operating-system native nt-native-api

我没有得到关于NT进程的概念,因为我正在使用本机API。因为它们返回的值如STATUS_TIMEOUTSTATUS_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,这意味着什么?

2 个答案:

答案 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

相关问题