다음을 통해 공유


AVStream의 디바이스 뮤텍스

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

개체 계층 구조는 디바이스 뮤텍스가 유지되는 경우 디바이스에서 개별 필터까지 안정적으로 유지됩니다. 따라서 미니 드라이버는 KsCreateFilterFactory를 호출하여 필터 팩터리를 수동으로 만들기 전에 디바이스 뮤텍스를 가져와야 합니다. 미니드라이버는 장치 뮤텍스를 얻은 후에 KsXxxGetFirstChildXxx 함수와 KsXxxGetNextSiblingXxx 함수를 호출하여 객체 계층 구조를 순회해야 합니다.

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

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

AVStream은 장치 뮤텍스를 이미 유지 중인 상태에서 필터 컨트롤 뮤텍스를 가져오는 경우가 많습니다. 따라서 일반적으로 필터 컨트롤 뮤텍스를 가져온 스레드는 이후에 디바이스 뮤텍스를 가져오는 것을 피해야 합니다.

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

KsAcquireDevice, KsReleaseDevice