次の方法で共有


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_PROPERTYSRB_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構造体へのポインターをミニドライバーの StrMiniReceiveStreamDataPacketStrMiniReceiveStreamControlPacket、および StrMiniReceiveDevicePacket ルーチンに渡します。

ミニドライバーは、要求がタイムアウトするか、要求を完了するまで、このストリーム要求ブロックを所有します。 ミニドライバーは、デバイス固有の要求に対して StreamClassDeviceNotification(DeviceRequestComplete,pSrb-HwDeviceExtension>, pSRB) を呼び出すか、 StreamClassStreamNotification(StreamRequestComplete, pSrb-StreamObject>, pSrb) を呼び出して、要求を完了したことをクラス ドライバーに通知します。 (ミニドライバーは、 StreamClassCompleteRequestAndMarkQueueReady(pSrb) を呼び出すことで要求を完了することもできます。 詳細については、そのルーチンを参照してください)。)

クラス ドライバーが要求をタイムアウトすると、ミニドライバーの StrMiniRequestTimeout ルーチンが呼び出されます。このルーチンは、要求の処理を終了する必要があります。 ミニドライバーが後で処理するために要求をキューに入れる場合は、 TimeoutCounter メンバーを 0 に設定する必要があります。これにより、クラス ドライバーが要求をタイムアウトできなくなります。 ミニドライバーが要求の処理を再開する準備ができたら、 TimeoutCounter メンバーを TimeoutOriginal の値にリセットする必要があります。

要件

要件
Header strmini.h (Strmini.h を含む)