AVStream のフィルター制御ミューテックス
各 AVStream フィルター インスタンスには、関連するフィルター制御ミューテックスがあります。 このミューテックスは、フィルターから個々のピンまでのオブジェクト階層へのアクセスを同期するために使用されます。 フィルターとピンの作成と破棄は、このミューテックスと同期されます。
オブジェクト階層は、フィルター 制御ミューテックスが保持されている間、特定のフィルター インスタンスから下向きにのみ安定していることが保証されます。 したがって、ミニドライバーは、KsXxxGetFirstChildXxx 関数と KsXxxGetNextSiblingXxx 関数を使用して、フィルター レベルの下のオブジェクト階層を走査する前に、フィルター制御ミューテックスを取得する必要があります。
フィルター 制御ミューテックスは、状態遷移の同期にも使用されます。
AVStream は、記述子の変更を実行する場合など、階層が安定している必要があるプロパティを処理するときに、フィルター制御ミューテックスを取得します。
個々のフィルターの下のオブジェクト階層には、1 つのフィルター 制御ミューテックスが使用されていることに注意してください。 これは、ミニドライバーがピン オブジェクトを持つ関数を呼び出すときに、ピン オブジェクトがその親のフィルター制御ミューテックスを使用することを意味します。
AVStream は、次のミニドライバーが提供するルーチンを呼び出すときに、ミニドライバーに代わってフィルター制御ミューテックスを保持します。
デバイス ミューテックスと同様に、フィルター 制御ミューテックスを再帰的に取得することはできません。 たとえば、AVStream がスレッド A のコンテキストで Create ディスパッチのためにミニドライバーにコールバックを行い、後で、ミニドライバーがスレッド A 内からミューテックスを取得しようとすると、スレッド A 自体でデッドロックが発生します。
次のいずれかのアクションを実行すると、デッドロックが発生する可能性があります。
プロセス ルーチン内からフィルター制御ミューテックスを取得しようとします。
Sleep コールバックまたは Wake コールバック内からフィルター制御ミューテックスを取得しようとします。
フィルター制御ミューテックスを操作するには、次の関数を使用します。
KsAcquireControl、KsFilterAcquireControl、KsPinAcquireControl、 KsReleaseControl、KsFilterReleaseControl、KsPinReleaseControl