AVCSTRM_READ

AVCSTRM_READ函数代码用于提交数据缓冲区avcstrm.sys指定流中填充的数据。

I/O 状态块

如果成功, avcstrm.sysIrp-IoStatus.Status> STATUS_SUCCESS。

可能的错误返回值包括:

错误状态 说明
STATUS_DEVICE_REMOVED 与操作对应的 AVCSTRM_READ 不再存在。
STATUS_CANCELLED 无法完成请求。
STATUS_INVALID_PARAMETER 在 IRP 中指定的参数不正确,
STATUS_INSUFFICIENT_RESOURCES 没有足够的系统资源来完成请求。
STATUS_PENDING 已收到请求,但需要进一步处理。 I/O 完成例程将处理最终响应。

AVC_STREAM_REQUEST_BLOCK输入

SizeOfThisBlock、版本和函数
使用 INIT_AVCSTRM_HEADER 宏初始化这些成员。 将 AVCSTRM_READ 宏的 Request 参数中传递 。

AVCStreamContext
指定作为读取 () 数据源的AVCSTRM_OPEN调用返回的流上下文。

BufferStruct
指定读取操作应放置数据的缓冲区。

子单元驱动程序必须先分配 IRP 和AVC_STREAM_REQUEST_BLOCK结构

接下来,它应当使用 INIT_AVCSTRM_HEADER 宏来初始化 AVC_STREAM_REQUEST_BLOCK 结构, AVCSTRM_READ作为 Request 参数传递给宏。

接下来,子单元驱动程序将 AVCStreamContext 成员 (流上下文) 提供要读取的数据的流的句柄。 最后,子单元驱动程序设置 CommandData 联合的 BufferStruct 成员,该成员描述读取操作将数据放入的缓冲区。

若要发送此请求,子单元提交 IRP_MJ_INTERNAL_DEVICE_CONTROL IRP,并将 IRP 的 IoControlCode 成员设置为 IOCTL_AVCSTRM_CLASS, 并将 IRP 的 Argument1 成员设置为描述要进行读取的 AVC_STREAM_REQUEST_BLOCK 结构。

此命令以异步方式完成。 完成后,将调用 IRP 中设置的 I/O 完成例程。

必须在 IRQL = PASSIVE_LEVEL 调用此函数代码。

注释

此函数在函数结构中使用 CommandData 联合的 BufferStruct AVC_STREAM_REQUEST_BLOCK成员,如下所示。

typedef struct _AVC_STREAM_REQUEST_BLOCK {
  ULONG  SizeOfThisBlock;
  ULONG  Version;
  AVCSTRM_FUNCTION  Function;
  .
  .
  PVOID AVCStreamContext;
  .
  .
  union _tagCommandData {
    .
    .
    AVCSTRM_BUFFER_STRUCT  BufferStruct;
    .
    .
  } CommandData;
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;

要求

头:avcstrm.h 中声明。 包括 avcstrm.h

另请参阅

AVC_STREAM_REQUEST_BLOCK

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_BUFFER_STRUCT

AVCSTRM_FUNCTION