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、およびPORT_CONFIGURATION_INFORMATION構造体の HwDeviceExtension メンバー内のこのバッファーへのポインターも渡します。
SRBExtension
クラス ドライバーがこのストリーム要求ブロックの処理中に使用するためにミニドライバーに割り当てる初期化されていないバッファーを指します。 ミニドライバーがブロックの処理を完了すると、このバッファーの割り当てが解除されます (詳細については、「 StreamClassDeviceNotification 」または 「StreamClassStreamNotification 」を参照してください)。
CommandData
CommandData は、コマンド コード固有のデータに対して提供されるメンバーの和集合です。
CommandData.DataBufferArray
KSSTREAM_HEADER構造体の配列へのポインター。 この配列内のエントリの数は、 NumberOfBuffers で指定されます。 各KSSTREAM_HEADERでは、1 つのデータ ブロックについて説明します。
このメンバーは、コマンド コードが SRB_READ_DATA または SRB_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 構造体を指します。
このメンバーは、コマンド コードが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
この要求がタイムアウトするまでの秒数。クラス ドライバーは、1 秒に 1 回これをデクリメントします。 ミニドライバーがこの要求を完了する前に、クラス ドライバーが TimeoutCounter を 0 に減らすと、ミニドライバーの StrMiniRequestTimeout ルーチンが呼び出されます。 ミニドライバーがこれを 0 に設定した場合、要求はタイムアウトしません。
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構造体へのポインターをミニドライバーの StrMiniReceiveStreamDataPacket、 StrMiniReceiveStreamControlPacket、および StrMiniReceiveDevicePacket ルーチンに渡します。
ミニドライバーは、要求がタイムアウトするか、要求を完了するまで、このストリーム要求ブロックを所有します。 ミニドライバーは、デバイス固有の要求に対して StreamClassDeviceNotification(DeviceRequestComplete,pSrb-HwDeviceExtension>, pSRB) を呼び出すか、 StreamClassStreamNotification(StreamRequestComplete, pSrb-StreamObject>, pSrb) を呼び出して、要求を完了したことをクラス ドライバーに通知します。 (ミニドライバーは、 StreamClassCompleteRequestAndMarkQueueReady(pSrb) を呼び出すことで要求を完了することもできます。 詳細については、そのルーチンを参照してください)。)
クラス ドライバーが要求をタイムアウトすると、ミニドライバーの StrMiniRequestTimeout ルーチンが呼び出されます。このルーチンは、要求の処理を終了する必要があります。 ミニドライバーが後で処理するために要求をキューに入れる場合は、 TimeoutCounter メンバーを 0 に設定する必要があります。これにより、クラス ドライバーが要求をタイムアウトできなくなります。 ミニドライバーが要求の処理を再開する準備ができたら、 TimeoutCounter メンバーを TimeoutOriginal の値にリセットする必要があります。
要件
要件 | 値 |
---|---|
Header | strmini.h (Strmini.h を含む) |