ストリーム ポインターの紹介
旧ストリーム クラス モデルでは、ミニドライバーは自身のデータ ストリーム要求ブロック (SRB) キューを維持する役割を担います。 AVStream は、ストリーム ポインターの抽象化を通じてこの機能を提供します。 ストリーム ポインターは、特定の AVStream データ フレームへの参照です。
ピン中心の処理 (ほとんどのハードウェア ドライバー) を使用するミニドライバーは、ストリーム ポインターを使用してピン キューを管理します。 各ピンには、データ バッファーの独立したキューがあります。 データ パケットがピン (読み取りまたは書き込み要求) に到着すると、AVStream はパケットをキューに追加し、ピンのプロセス ディスパッチを呼び出す可能性があります。
フィルター中心の処理を使用するミニドライバーは、ストリーム ポインターを直接使用しないでください。 詳しくは、「フィルター中心の処理」を参照してください。
既定では、各キューには先頭エッジ ストリーム ポインターがあります。 必要に応じて、末尾のエッジ フラグが指定されている場合は、末尾のエッジ ストリーム ポインターを持つことができます。 ミニドライバーは、KsStreamPointerClone を呼び出すことによって、新しいストリーム ポインターを作成できます。
ストリーム ポインターは、新しいフレームにのみ一方向に移動できます。 これを、ストリーム ポインターを進めることと呼びます。
ストリーム ポインターを進める
ストリーム ポインターを進めるときは、新しいフレームに移動するか、現在のフレーム内のバイト数を進めます。 たとえば、ミニドライバーは、最初のフレーム到着から 2 番目のフレーム到着にストリーム ポインターを進めることができます。
ストリーム ポインターを進めるために、ピン中心のフィルターは、Eject パラメーターを TRUE に設定して KsStreamPointerAdvance または KsStreamPointerUnlock を呼び出すことができます。
フレーム参照カウント
ストリーム ポインターがポイントされているフレームは、先頭と末尾の端の間のウィンドウ内にあるフレームと同様に、参照カウントされます。
ミニドライバーがストリーム ポインターで終了すると、必要に応じて KsStreamPointerSetStatusCode を呼び出して、指定された I/O 要求パケット (IRP) を完了するエラー コードを指定できます。 ミニドライバーは、KsStreamPointerDelete を呼び出す必要があります。 その後、AVStream は、削除されたストリーム ポインターが以前に参照したフレームの参照カウントをデクリメントします。 先頭と末尾のストリーム ポインターは削除できません。