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_OBJECTHW_TIME_CONTEXT的HwDeviceExtension 成員中傳遞這個緩衝區的指標,並PORT_CONFIGURATION_INFORMATION傳遞至迷你驅動程序的結構。

SRBExtension

指向類別驅動程式配置給迷你驅動程式在處理此數據流要求區塊時要使用的未初始化緩衝區。 此緩衝區會在迷你驅動程式完成其區塊處理 (請參閱 StreamClassDeviceNotificationStreamClassStreamNotification 以取得詳細數據) 。

CommandData

CommandData 是提供給命令程式代碼特定數據的成員聯集。

CommandData.DataBufferArray

KSSTREAM_HEADER 結構的陣列指標。 此陣列中的項目數目是在 NumberOfBuffers 中指定。 每個KSSTREAM_HEADER都會描述一個數據區塊。

當命令程式代碼 SRB_READ_DATASRB_WRITE_DATA時,會使用此成員。

CommandData.StreamBuffer

指向 HW_STREAM_DESCRIPTOR 結構,迷你驅動程式會填入它支援的核心串流語意描述。

minidriver 會指定此緩衝區在其PORT_CONFIGURATION_INFORMATION結構之 StreamDescriptorSize 成員的大小。

當命令程式代碼 SRB_GET_STREAM_INFO時,會使用此成員。

CommandData.StreamState

數據流狀態。 如需詳細資訊 ,請參閱KSPROPERTY_CONNECTION_STATE

當命令程式代碼 SRB_GET_STREAM_STATESRB_SET_STREAM_STATE時,會使用此成員。

CommandData.TimeReference

STREAM_TIME_REFERENCE 結構的指標。

CommandData.PropertyInfo

指向指定屬性取得或設定作業之參數 的STREAM_PROPERTY_DESCRIPTOR 結構。

當命令程式代碼 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_CLOCKSRB_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

此要求逾時之前的秒數。類別驅動程式每秒遞減一次。 如果類別驅動程式在 minidriver 完成此要求之前將 TimeoutCounter 遞減為零,它會呼叫 minidriver 的 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位會針對傳遞至minidriver 的 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]

[1] 保留欄位供系統使用。 請勿使用。

備註

數據流類別驅動程式會將指標傳遞給minidriver的 StrMiniReceiveStreamDataPacketStrMiniReceiveStreamControlPacketStrMiniReceiveDevicePacket 例程的HW_STREAM_REQUEST_BLOCK結構。

迷你驅動程式擁有此數據流要求區塊,直到要求逾時或完成要求為止。 迷你驅動程式會向類別驅動程式發出訊號,指出它已完成要求,方法是呼叫 StreamClassDeviceNotification (DeviceRequestComplete、pSrb-HwDeviceExtension>、pSRB) 裝置特定要求,或呼叫 StreamClassStreamNotification (StreamRequestComplete、pSrb-StreamObject>、pSrb) 進行數據流特定要求。 (minidriver 也可以呼叫 StreamClassCompleteRequestAndMarkQueueReady (pSrb) 來完成要求。 請參閱該例程以取得 details.)

如果類別驅動程式逾時要求,它會呼叫minidriver的 StrMiniRequestTimeout 例程,其負責終止處理要求。 如果迷你驅動程式將要求排入佇列以供稍後處理,它應該將 TimeoutCounter 成員設定為零,以防止類別驅動程式逾時要求。 一旦迷你驅動程式準備好繼續處理要求之後,它應該會將 TimeoutCounter 成員重設為 TimeoutOriginal 的值。

規格需求

需求
標頭 strmini.h (包含 Strmini.h)