Freigeben über


Gerätemutex in AVStream

Verwenden Sie den Gerätemutex, um Objekte in der Hierarchie vom Gerät mit den Filtern zu synchronisieren. Jedes AVStream-Gerät verfügt über einen einzelnen zugeordneten Gerätemutex. Die Erstellung und Zerstörung von Filterfabriken und Filtern wird mit diesem Mutex synchronisiert. Bestimmte Plug & Play- und Energieverwaltungsvorgänge werden ebenfalls mit diesem Mutex synchronisiert. Der Minidriver konzentriert sich auf zwei Standard Probleme in Bezug auf den Gerätemutex.

Die Objekthierarchie ist garantiert nur vom Gerät bis hin zu einzelnen Filtern stabil, wenn der Gerätemutex gehalten wird. Daher muss der Minidriver den Gerätemutex abrufen, bevor er Filterfabriken manuell durch Aufrufen von KsCreateFilterFactory erstellt. Der Minidriver muss auch den Gerätemutex abrufen, bevor er die Objekthierarchie durchläuft, indem er die Funktionen KsXxxGetFirstChildXxx und KsXxxGetNextSiblingXxx aufruft.

AVStream hält den Gerätemutex im Namen des Minitreibers, wenn er die folgenden Anforderungen empfängt:

Es ist wichtig zu beachten, dass der Gerätemutex nicht rekursiv abgerufen werden kann. Betrachten Sie das folgende Beispiel. AVStream empfängt eine Ruhezustandsbenachrichtigung. Wie oben beschrieben, wird der Gerätemutex im Auftrag des Minidrivers verwendet. Wenn AVStream dann eine vom Minidriver bereitgestellte Rückrufroutine im Kontext von Thread A aufruft, darf der Minitreiber anschließend nicht versuchen, den Gerätemutex in Thread A abzurufen. Dies führt dazu, dass Thread A mit sich selbst zu einem Deadlock führt.

AVStream erhält häufig Mutexe zur Filtersteuerung, während der Gerätemutex bereits gehalten ist. Daher sollte ein Thread, der einen Mutex für die Filtersteuerung verwendet hat, den Gerätemutex in der Regel nicht später übernehmen.

Verwenden Sie die folgenden Funktionen, um den Mutex des Geräts zu bearbeiten:

KsAcquireDevice, KsReleaseDevice