IO_STATUS_BLOCK 结构 (wdm.h)

在为 IRP 调用 IoCompleteRequest 之前,驱动程序设置 IRP 的 I/O 状态块以指示 I/O 请求的最终状态。

语法

typedef struct _IO_STATUS_BLOCK {
  union {
    NTSTATUS Status;
    PVOID    Pointer;
  };
  ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

成员

Status

这是完成状态,STATUS_SUCCESS请求的操作是否已成功完成,或者信息性、警告或错误STATUS_XXX 值。 有关详细信息,请参阅 使用 NTSTATUS 值

Pointer

保留。 仅限内部使用。

Information

此值设置为依赖于请求的值。 例如,成功完成传输请求后,此值设置为传输的字节数。 如果使用另一个STATUS_XXX 完成转移请求,则此成员设置为零。

注解

除非驱动程序的调度例程使用错误状态值完成 IRP,否则链中的最低级别驱动程序经常将 IRP 的 I/O 状态块设置为将返回到 I/O 操作的原始请求者的值。

较高级别驱动程序的 IoCompletion 例程通常检查低级驱动程序完成的 I/O 状态块。 根据设计,IRP 中的 I/O 状态块是唯一从基础设备驱动程序传回给所有更高级别驱动程序的 IoCompletion 例程的信息。

操作系统实现将IO_STATUS_BLOCK值写入调用方提供的输出缓冲区的支持例程。 有关示例,请参阅 ZwOpenFileNtOpenFile。 这些例程返回的状态代码可能与 IO_STATUS_BLOCK 结构中的状态代码不匹配。 如果其中一个例程返回STATUS_PENDING,调用方应等待 I/O 操作完成,然后检查IO_STATUS_BLOCK结构中的状态代码来确定操作的最终状态。 如果例程返回STATUS_PENDING以外的状态代码,则调用方应依赖于此状态代码,而不是 IO_STATUS_BLOCK 结构中的状态代码。

有关详细信息,请参阅 I/O 状态块

要求

要求
Header wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Wudfwdm.h)

另请参阅

IO_STACK_LOCATION

IRP

IoCompleteRequest

IoSetCompletionRoutine