Share via


스트림 포인터 소개

이전 스트림 클래스 모델에서 미니드라이버가 자체 SRB(데이터 스트림 요청 블록) 큐를 유지 관리합니다. AVStream은 스트림 포인터 추상화를 통해 이 기능을 제공합니다. 스트림 포인터는 특정 AVStream 데이터 프레임에 대한 참조입니다.

핀 중심 처리(대부분의 하드웨어 드라이버)를 사용하는 미니드라이버에서 스트림 포인터를 사용하여 핀 큐를 관리합니다. 각 핀에는 독립적인 데이터 버퍼 큐가 있습니다. 데이터 패킷이 핀(읽기 또는 쓰기 요청)에 도착하면 AVStream은 패킷을 큐에 추가하고 핀의 프로세스 디스패치를 호출할 수 있습니다.

필터 중심 처리를 사용하는 미니드라이버에서 스트림 포인터를 직접 사용하면 안 됩니다. 자세한 내용은 필터 중심 처리를 참조하세요.

기본적으로 각 큐에는 선행 에지 스트림 포인터가 있습니다. 필요에 따라 후행 에지 플래그가 지정된 경우 후행 에지 스트림 포인터가 있을 수 있습니다. 미니 드라이버는 KsStreamPointerClone을 호출하여 새 스트림 포인터를 만들 수 있습니다.

스트림 포인터를 한 방향으로만 이동할 수 있습니다. 즉, 최신 프레임으로 이동할 수 있습니다. 이를 스트림 포인터 진행이라고 합니다.

스트림 포인터 진행

스트림 포인터를 앞으로 이동하면 최신 프레임으로 이동하거나 현재 프레임 내에서 몇 바이트를 앞으로 이동합니다. instance 경우 미니 드라이버는 첫 번째 프레임 도착부터 두 번째 프레임 도착까지 스트림 포인터를 진행할 수 있습니다.

스트림 포인터를 진행하기 위해 핀 중심 필터는 Eject 매개 변수가 TRUE로 설정된 KsStreamPointerAdvance 또는 KsStreamPointerUnlock을 호출할 수 있습니다.

프레임 참조 수

스트림 포인터가 가리키는 프레임은 선행 가장자리와 후행 가장자리 사이의 창에 있는 프레임과 마찬가지로 참조가 계산됩니다.

미니드라이버가 스트림 포인터로 완료되면 필요에 따라 KsStreamPointerSetStatusCode 를 호출하여 지정된 IRP(I/O 요청 패킷)를 완료할 오류 코드를 지정할 수 있습니다. 그런 다음 미니드라이버가 KsStreamPointerDelete를 호출해야 합니다. 그런 다음 AVStream은 삭제된 스트림 포인터가 이전에 참조한 프레임의 참조 수를 감소합니다. 선행 및 후행 에지 스트림 포인터는 삭제할 수 없습니다.