wdm.h (IO_STATUS_BLOCK结构)

驱动程序设置 IRP 的 I/O 状态块,以指示 I/O 请求的最终状态,然后再调用 IRP 的 IoCompleteRequest

语法

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 例程通常检查由较低驱动程序完成的 IRP 中的 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