Share via


스트림 포인터 잠금 및 잠금 해제

각 스트림 포인터는 잠금 상태 유지 관리합니다( 잠기거나 잠금 해제됨).

잠긴 스트림 포인터는 큐의 데이터를 참조하도록 보장됩니다. 잠긴 스트림 포인터가 가리키는 데이터 프레임은 취소할 수 없습니다. 따라서 미니 드라이버는 잠긴 스트림 포인터를 보유하는 데 걸리는 시간을 최소화해야 합니다.

잠금 해제된 스트림 포인터는 큐 내에서 데이터 프레임을 참조하도록 보장되지 않습니다. 잠금 해제된 스트림 포인터를 보유하면 미니드라이버가 데이터 포인터를 유지할 수 있지만 프레임을 취소할 수 있습니다.

잠금 해제된 스트림 포인터가 가리키는 데이터에 액세스할 수 있습니다. KsStreamPointerClone에서 제공하는 CancelCallback 루틴이 KsStreamPointerDelete를 호출하는 경우 CancelCallback 및 수행하는 모든 데이터 액세스를 동기화해야 합니다. 미니드라이버에서는 다른 스레드가 사용하는 동안 취소 콜백 루틴이 스트림 포인터를 삭제하지 않도록 해야 합니다.

취소 콜백 루틴이 KsStreamPointerDelete를 호출하지 않는 경우 동기화가 필요하지 않을 수 있습니다.

스트림 포인터를 잠그려면 KsStreamPointerLock을 호출합니다. 스트림 포인터의 잠금을 해제하려면 KsStreamPointerUnlock을 호출합니다.

IRP가 취소되면 AVStream은 IRP 내의 프레임을 가리키는 잠금 해제된 모든 스트림 포인터에 대한 취소 콜백을 호출합니다.

선행 및 후행 에지 스트림 포인터가 사용되지 않는 경우에만 잠금을 해제합니다.