Freigeben über


Device Mutex in AVStream

Verwenden Sie den Gerätemutex, um Objekte in der Hierarchie vom Gerät bis zu den Filtern zu synchronisieren. Jedes AVStream-Gerät verfügt über einen einzelnen zugehörigen Gerätemutex. Die Erstellung und Zerstörung von Filterfabriken und Filtern wird mit diesem Mutex synchronisiert. Bestimmte Plug-and-Play- und Energieverwaltungsvorgänge werden ebenfalls mit diesem Mutex synchronisiert. Der Minidriver konzentriert sich auf zwei Hauptthemen im Hinblick auf das Geräte-Mutex.

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

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

Es ist wichtig zu beachten, dass das Gerät mutex nicht rekursiv abgerufen werden kann. Betrachten Sie das folgende Beispiel. AVStream empfängt eine Ruhezustandsbenachrichtigung. Wie oben beschrieben, nimmt es das Geräte-Mutex im Namen des Minidrivers in Anspruch. Wenn AVStream dann eine vom Minidriver bereitgestellte Rückrufroutine im Kontext von Thread A aufruft, darf der Minidriver anschließend nicht versuchen, den Gerätemutex in Thread A zu übernehmen. Dadurch wird Thread A mit sich selbst blockiert.

AVStream erlangt häufig Mutexe für Filtersteuerungen, während der Gerätemutex bereits gehalten wird. Folglich sollte ein Thread, der ein Filtersteuerungs-Mutex übernommen hat, in der Regel anschließend nicht den Geräte-Mutex übernehmen.

Verwenden Sie die folgenden Funktionen, um den Gerätemutex zu bearbeiten:

KsAcquireDevice, KsReleaseDevice