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值写入调用方提供的输出缓冲区的支持例程。 有关示例,请参阅 ZwOpenFile 或 NtOpenFile。 这些例程返回的状态代码可能与 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) |