ストリーム ポインターのロックとロック解除

各ストリーム ポインターは、ロック状態 (ロックまたはロック解除) を維持します。

ロックされたストリーム ポインターは、キュー内のデータを参照することが保証されます。 ロックされたストリーム ポインターが指すデータ フレームを取り消すことはできません。 そのため、ミニドライバーは、ロックされたストリーム ポインターを保持する時間を最小限に抑える必要があります。

ロック解除されたストリーム ポインターは、キュー内のデータ フレームを参照することは保証されません。 ロック解除されたストリーム ポインターを保持することで、ミニドライバーは、データ ポインターを保持しつつ、フレームを取り消すことができます。

ロック解除されたストリーム ポインターが指すデータにアクセスできます。 KsStreamPointerClone が提供する CancelCallback ルーチンが KsStreamPointerDeleteを呼び出す場合は、CancelCallback と、CancelCallback が実行するデータ アクセスを同期する必要があります。 ミニドライバーは、他のスレッドがストリーム ポインターを使用している間に、キャンセル コールバック ルーチンがストリーム ポインターを削除しないようにする必要があります。

キャンセル コールバック ルーチンが KsStreamPointerDelete を呼び出さない場合は、同期は必要ありません。

ストリーム ポインターをロックするには、 KsStreamPointerLock を呼び出します。 ストリーム ポインターをロック解除するには、 KsStreamPointerUnlock を呼び出します。

IRP が取り消されると、AVStream は、IRP 内のフレームを指す、ロック解除されたすべてのストリーム ポインターのキャンセル コールバックを呼び出します。

先頭と末尾のエッジ ストリーム ポインターが使用されていない場合にのみ、ロックを解除します。