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_OBJECT、HW_TIME_CONTEXT的HwDeviceExtension 成員中傳遞這個緩衝區的指標,並PORT_CONFIGURATION_INFORMATION傳遞至迷你驅動程序的結構。
SRBExtension
指向類別驅動程式配置給迷你驅動程式在處理此數據流要求區塊時要使用的未初始化緩衝區。 此緩衝區會在迷你驅動程式完成其區塊處理 (請參閱 StreamClassDeviceNotification 或 StreamClassStreamNotification 以取得詳細數據) 。
CommandData
CommandData 是提供給命令程式代碼特定數據的成員聯集。
CommandData.DataBufferArray
KSSTREAM_HEADER 結構的陣列指標。 此陣列中的項目數目是在 NumberOfBuffers 中指定。 每個KSSTREAM_HEADER都會描述一個數據區塊。
當命令程式代碼 SRB_READ_DATA 或 SRB_WRITE_DATA時,會使用此成員。
CommandData.StreamBuffer
指向 HW_STREAM_DESCRIPTOR 結構,迷你驅動程式會填入它支援的核心串流語意描述。
minidriver 會指定此緩衝區在其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 結構。
當命令程式代碼 SRB_GET_DEVICE_PROPERTY、 SRB_SET_DEVICE_PROPERTY、 SRB_GET_STREAM_PROPERTY或 SRB_SET_STREAM_PROPERTY時,會使用此成員。
CommandData.OpenFormat
指定格式之 KSDATAFORMAT 結構的指標。
當命令程式代碼 SRB_OPEN_STREAM 或 SRB_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_DATA或SRB_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的 StrMiniReceiveStreamDataPacket、 StrMiniReceiveStreamControlPacket 和 StrMiniReceiveDevicePacket 例程的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) |