次の方法で共有


SRB_OPEN_STREAM

クラス ドライバーは、ストリームを開くためにこの要求を送信します。

戻り値

ミニドライバーは、SRB の状態として次のいずれかを設定する必要があります。

STATUS_SUCCESS
コマンドが正常に完了したことを示します。

STATUS_NOT_IMPLEMENTED
ミニドライバーで関数がサポートされていないことを示します。

STATUS_TOO_MANY_NODES
このストリームを開くために十分なリソースがないことを示します。

STATUS_IO_DEVICE_ERROR
ハードウェア障害が発生したことを示します。

Comments

クラス ドライバーは、pSrb->StreamObject->StreamNumber を開くストリームの数に設定して、pSrb->StreamObjectHW_STREAM_OBJECT バッファーを提供します。 pSrb ポインターは、HW_STREAM_REQUEST_BLOCK 構造体を指します。 StreamNumber は、SRB_GET_STREAM_INFO 要求に応答してミニドライバーが提供する HW_STREAM_DESCRIPTOR 構造体内のストリームのオフセットに対応します。 クラス ドライバーは、開いているストリームが pSrb->CommandData->OpenFormat で提供する必要があるデータ形式を指定します。

ミニドライバーは、この要求を受信すると、指定したストリームをこの時点で開くことができるかどうかを判断する必要があります。 ミニドライバーは、SRB の OpenFormat フィールドに渡された KSDATAFORMAT 形式も確認する必要があります。 ストリームを開くことができる場合、ミニドライバーは HW_STREAM_OBJECT 構造体を更新し、STATUS_SUCCESS を返します。 ストリーム インスタンスの最大数が既に開いている場合、またはこのストリームを開くために必要なハードウェア リソースが使用できない場合、ミニドライバーは適切なエラー状態を返します。

SRB_OPEN_STREAM コマンドがミニドライバーによって受信されると、ミニドライバーは次の処理を行います。

  1. ストリーム インスタンスの最大数を超えていないこと、ストリーム インデックス値が有効であることを確認します。

  2. 要求されたデータ形式がこのストリームに対して有効であることを確認します。

  3. ストリームの形式を設定します。

  4. 任意のストリームから IRP を取り消すことができるように、デバイス拡張機能のすべてのストリーム拡張機能構造の配列を維持します。

  5. ストリーム オブジェクトで、ストリーム データ ハンドラーとコントロール ハンドラーへのポインターを指定します。

  6. デバイスが ReceiveDataPacket ルーチンに渡されたデータ バッファー アドレスに直接 DMA を実行する場合は、ストリーム オブジェクトに DMA フラグを設定します。 ドライバーが論理アドレス指定を使用して渡されたデータ バッファーにアクセスする場合は、ストリーム オブジェクトで PIO フラグも設定します。

  7. ストリームでクロック サポートが使用可能な場合は、ストリーム オブジェクトの HwClockObject メンバーを使用してこれを指定します。