HW_STREAM_REQUEST_BLOCK 结构 (strmini.h)

流类驱动程序使用 HW_STREAM_REQUEST_BLOCK 结构,使用微型驱动程序提供的回调向微型驱动程序传递和从微型驱动程序传递信息。

语法

typedef struct _HW_STREAM_REQUEST_BLOCK {
  ULONG                           SizeOfThisPacket;
  SRB_COMMAND                     Command;
  NTSTATUS                        Status;
  PHW_STREAM_OBJECT               StreamObject;
  PVOID                           HwDeviceExtension;
  PVOID                           SRBExtension;
  union {
    PKSSTREAM_HEADER                       DataBufferArray;
    PHW_STREAM_DESCRIPTOR                  StreamBuffer;
    KSSTATE                                StreamState;
    PSTREAM_TIME_REFERENCE                 TimeReference;
    PSTREAM_PROPERTY_DESCRIPTOR            PropertyInfo;
    PKSDATAFORMAT                          OpenFormat;
    struct _PORT_CONFIGURATION_INFORMATION *ConfigInfo;
    HANDLE                                 MasterClockHandle;
    DEVICE_POWER_STATE                     DeviceState;
    PSTREAM_DATA_INTERSECT_INFO            IntersectInfo;
    PVOID                                  MethodInfo;
    LONG                                   FilterTypeIndex;
    BOOLEAN                                Idle;
  } CommandData;
  _CommandData                    _CommandData;
  ULONG                           NumberOfBuffers;
  ULONG                           TimeoutCounter;
  ULONG                           TimeoutOriginal;
  struct _HW_STREAM_REQUEST_BLOCK *NextSRB;
  PIRP                            Irp;
  ULONG                           Flags;
  PVOID                           HwInstanceExtension;
  union {
    ULONG NumberOfBytesToTransfer;
    ULONG ActualBytesTransferred;
  };
  PKSSCATTER_GATHER               ScatterGatherBuffer;
  ULONG                           NumberOfPhysicalPages;
  ULONG                           NumberOfScatterGatherElements;
  ULONG                           Reserved[1];
} HW_STREAM_REQUEST_BLOCK, *PHW_STREAM_REQUEST_BLOCK;

成员

SizeOfThisPacket

指定此结构的大小(以字节为单位)。

Command

指定要由微型驱动程序的回调执行的操作。 类驱动程序将SRB_XXX命令代码传递给微型驱动程序回调。

Status

当微型驱动程序完成流请求时,它会用请求的状态代码填充此成员。 有关微型驱动程序应使用的状态代码,请参阅相应的 StrMiniXxx请求 例程的文档。

StreamObject

对于面向流的请求,类驱动程序将此设置为指向 HW_STREAM_OBJECT 结构,该结构指定类驱动程序发出请求的流。

HwDeviceExtension

指向微型驱动程序的设备扩展的指针。 微型驱动程序可以使用此缓冲区来记录私人信息。 微型驱动程序在通过 StreamClassRegisterMinidriver 注册自身时,在传递的HW_INITIALIZATION_DATA结构中设置此缓冲区的大小。 类驱动程序还会将指针传递到HW_STREAM_OBJECTHwDeviceExtension 成员中的此缓冲区,HW_TIME_CONTEXT,并将PORT_CONFIGURATION_INFORMATION结构传递给微型驱动程序。

SRBExtension

指向类驱动程序为微型驱动程序分配的未初始化缓冲区,以便在处理此流请求块时使用。 此缓冲区在微型驱动程序完成对块的处理后解除分配 (请参阅 StreamClassDeviceNotificationStreamClassStreamNotification 了解详细信息) 。

CommandData

CommandData 是为特定于命令代码的数据提供的成员联合。

CommandData.DataBufferArray

指向 KSSTREAM_HEADER 结构的数组的指针。 此数组中的条目数在 NumberOfBuffers 中指定。 每个KSSTREAM_HEADER描述一个数据块。

SRB_READ_DATASRB_WRITE_DATA命令代码时使用此成员。

CommandData.StreamBuffer

指向微型驱动程序填充的 HW_STREAM_DESCRIPTOR 结构,并说明它支持的内核流式处理语义。

微型驱动程序在其 PORT_CONFIGURATION_INFORMATION 结构的 StreamDescriptorSize 成员中指定此缓冲区的大小。

SRB_GET_STREAM_INFO命令代码时使用此成员。

CommandData.StreamState

流状态。 有关详细信息 ,请参阅KSPROPERTY_CONNECTION_STATE

SRB_GET_STREAM_STATE或SRB_SET_STREAM_STATE命令代码时使用此成员。

CommandData.TimeReference

指向STREAM_TIME_REFERENCE结构的指针。

CommandData.PropertyInfo

指向 STREAM_PROPERTY_DESCRIPTOR 结构,该结构指定属性 get 或 set 操作的参数。

当命令代码 SRB_GET_DEVICE_PROPERTYSRB_SET_DEVICE_PROPERTYSRB_GET_STREAM_PROPERTYSRB_SET_STREAM_PROPERTY时,使用此成员。

CommandData.OpenFormat

指向 KSDATAFORMAT 结构的指针,该结构指定格式。

命令代码SRB_OPEN_STREAMSRB_PROPOSE_DATA_FORMAT时使用此成员。

CommandData.ConfigInfo

指向用于初始化设备的 PORT_CONFIGURATION_INFORMATION 结构的指针

SRB_INITIALIZE_DEVICE命令代码时使用此成员。

CommandData.MasterClockHandle

现在用作主时钟的时钟对象的句柄。

SRB_OPEN_MASTER_CLOCK或SRB_INDICATE_MASTER_CLOCK命令代码时使用此成员。

CommandData.DeviceState

指定新的电源状态。

SRB_CHANGE_POWER_STATE命令代码时使用此成员。

CommandData.IntersectInfo

指向描述此操作参数 的STREAM_DATA_INTERSECT_INFO 结构的指针。

SRB_GET_DATA_INTERSECTION命令代码时使用此成员。

CommandData.MethodInfo

指向将从中读取或写入方法数据的缓冲区的指针。

CommandData.FilterTypeIndex

SRB_OPEN_DEVICE_INSTANCE的筛选器类型索引。

CommandData.Idle

如果设备没有打开的句柄,则此成员设置为 TRUE 。 如果设备不再处于空闲状态,则此成员将设置为 FALSE , () 打开设备的句柄。

SRB_NOTIFY_IDLE_STATE命令代码时使用此成员。

_CommandData

CommandData 是为特定于命令代码的数据提供的成员联合。

NumberOfBuffers

如果 Command 是SRB_READ_DATASRB_WRITE_DATA,则指定从 CommandData.DataBufferArray 指向的地址开始的KSSTREAM_HEADER结构数组中的条目数。 否则,此参数未使用。

TimeoutCounter

此请求超时之前的秒数。类驱动程序每秒递减一次。 如果类驱动程序在微型驱动程序完成此请求之前将 TimeoutCounter 递减为零,它将调用微型驱动程序的 StrMiniRequestTimeout 例程。 如果微型驱动程序将此设置为零,则请求不会超时。

TimeoutOriginal

类驱动程序在创建 SRB 时将其设置为 TimeoutCounter 的原始值。

NextSRB

指向另一个流请求块。 微型驱动程序可以使用此成员将流请求块排队。

Irp

指向请求的 IRP 的指针。 大多数微型驱动程序不需要使用此成员。

Flags

指定请求的类型。 类驱动程序和微型驱动程序可以使用此成员来确定类驱动程序将此流请求块传递到的回调。

使用的回调
StrMiniReceiveDevicePacket
SRB_HW_FLAGS_STREAM_REQUEST StrMiniReceiveStreamControlPacket
SRB_HW_FLAGS_DATA_TRANSFER StrMiniReceiveStreamDataPacket
SRB_HW_FLAGS_STREAM_REQUEST StrMiniReceiveStreamDataPacket

SRB_HW_FLAGS_STREAM_REQUEST位是为流特定的请求设置的, (这些请求传递到微型驱动程序的 StrMiniReceiveStreamXxx数据包 例程) 。 SRB_HW_FLAGS_DATA_TRANSFER位是为传递到微型驱动程序) 的数据传输请求 (设置的。

HwInstanceExtension

指向微型驱动程序的实例扩展的指针。 微型驱动程序可以使用此缓冲区将全局私人信息记录到微型驱动程序的此实例。 微型驱动程序在通过 StreamClassRegisterMinidriver 注册自身时,在传递的HW_INITIALIZATION_DATA结构中设置此缓冲区的大小。

NumberOfBytesToTransfer

对于SRB_READ_DATA或SRB_WRITE_DATA请求,需要传输的字节数。

ActualBytesTransferred

对于控制请求,实际传输的字节数。

ScatterGatherBuffer

指向KSSCATTER_GATHER结构的数组,其形式如下:

typedef struct {
    PHYSICAL_ADDRESS PhysicalAddress;
    ULONG Length;
} KSSCATTER_GATHER, *PKSSCATTER_GATHER;

数组描述微型驱动程序可用于执行 DMA 的散点/收集列表。 不需要探测、锁定、映射或刷新内存。 流类驱动程序为微型驱动程序执行这些操作。

NumberOfPhysicalPages

指定在 ScatterGatherBuffer 成员中传递的数组的大小。

NumberOfScatterGatherElements

指定 ScatterGatherBuffer 指向的物理元素数。

Reserved[1]

Reserved[1] 字段保留供系统使用。 请勿使用。

注解

流类驱动程序将指向HW_STREAM_REQUEST_BLOCK结构的指针传递给微型驱动程序的 StrMiniReceiveStreamDataPacketStrMiniReceiveStreamControlPacketStrMiniReceiveDevicePacket 例程。

微型驱动程序拥有此流请求块,直到请求超时或完成请求。 微型驱动程序通过调用 StreamClassDeviceNotification (DeviceRequestComplete、pSrb-HwDeviceExtension>、pSRB) (针对特定于设备的请求调用 StreamClassStreamNotification (StreamRequestComplete、pSrb-StreamObject、pSrb-StreamObject>、pSrb) )向类驱动程序发出信号,表明它已完成请求。 (微型驱动程序还可以通过调用 StreamClassCompleteRequestAndMarkQueueReady (pSrb) 来完成请求。 有关详细信息,请参阅该例程。)

如果类驱动程序超时请求,它将调用微型驱动程序的 StrMiniRequestTimeout 例程,该例程负责终止对请求的处理。 如果微型驱动程序将请求排队等待后续处理,它应将 TimeoutCounter 成员设置为零,这将防止类驱动程序超时请求。 微型驱动程序准备好继续处理请求后,它应将 TimeoutCounter 成员重置为 TimeoutOriginal 的值。

要求

要求
Header strmini.h (包括 Strmini.h)