AVStream의 디바이스 뮤텍스

디바이스 뮤텍스를 사용하여 계층 구조의 개체를 디바이스에서 필터로 동기화합니다. 각 AVStream 디바이스에는 연결된 단일 디바이스 뮤텍스가 있습니다. 필터 팩터리와 필터의 생성 및 소멸은 이 뮤텍스와 동기화됩니다. 특정 플러그 앤 플레이 및 전원 관리 작업도 이 뮤텍스와 동기화됩니다. 미니 드라이버는 디바이스 뮤텍스와 관련된 두 가지 기본 문제에 중점을 둡니다.

디바이스 뮤텍스가 유지되는 경우 개체 계층 구조는 디바이스에서 개별 필터까지 안정적으로 유지됩니다. 따라서 미니 드라이버는 KsCreateFilterFactory를 호출하여 필터 팩터리를 수동으로 만들기 전에 디바이스 뮤텍스를 가져와야 합니다. 또한 미니드라이버는 Ks Xxx GetFirstChild Xxx KsXxxGetNextSiblingXxx 함수를 호출하여 개체 계층 구조를 트래버스하기 전에 디바이스 뮤텍스를 가져와야 합니다.

AVStream은 다음 요청을 수신할 때 미니드라이버를 대신하여 디바이스 뮤텍스를 보유합니다.

디바이스 뮤텍스를 재귀적으로 가져올 수 없다는 점에 유의해야 합니다. 다음 예제를 살펴보십시오. AVStream은 절전 모드 알림을 받습니다. 위에서 설명한 대로 미니 드라이버 대신 디바이스 뮤텍스를 사용합니다. 그런 다음 AVStream이 스레드 A의 컨텍스트에서 미니드라이버 제공 콜백 루틴을 호출하는 경우 미니드라이버가 이후에 스레드 A에서 디바이스 뮤텍스를 가져오려고 시도해서는 안 됩니다. 이렇게 하면 스레드 A가 자체적으로 교착 상태가 됩니다.

AVStream은 디바이스 뮤텍스가 이미 유지되는 동안 필터 컨트롤 뮤텍스를 가져오는 경우가 많습니다. 따라서 일반적으로 필터 컨트롤 뮤텍스를 가져온 스레드는 이후에 디바이스 뮤텍스를 사용하지 않아야 합니다.

디바이스 뮤텍스를 조작하려면 다음 함수를 사용합니다.

KsAcquireDevice, KsReleaseDevice