1

I am not getting concept regarding NT processes as I am using native APIs.Since they are returning values like STATUS_TIMEOUT, STATUS_PENDING etc.What does STATUS_PENDING really mean?

My code goes like this.

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

Here,NtReadFile() is returning STATUS_PENDING, what does that means?

4

2 回答 2

6

意味着I/O 操作处于挂起状态,您应该等待句柄完成。这也可能意味着文件句柄是以异步模式打开的;如果你想要同步,你应该在同步模式下打开句柄,而不是首先避免STATUS_PENDING

于 2015-01-06T06:47:58.380 回答
5

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

返回值

ZwReadFile 返回 STATUS_SUCCESS 或适当的 NTSTATUS 错误代码。

是的,STATUS_PENDING是返回错误代码。它被记录为

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

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

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

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

于 2015-01-06T06:48:54.227 回答