다음을 통해 공유


SRB_OPEN_STREAM

클래스 드라이버는 스트림을 열기 위해 이 요청을 보냅니다.

반환 값

미니 드라이버는 다음 중 하나를 SRB의 상태 설정해야 합니다.

STATUS_SUCCESS
명령이 성공적으로 완료되었음을 나타냅니다.

STATUS_NOT_IMPLEMENTED
미니 드라이버에서 함수를 지원하지 않음을 나타냅니다.

STATUS_TOO_MANY_NODES
이 스트림을 열 리소스가 충분하지 않음을 나타냅니다.

STATUS_IO_DEVICE_ERROR
하드웨어 오류가 발생했음을 나타냅니다.

의견

클래스 드라이버는 pSrb-StreamObject에서 pSrb-StreamObject-StreamNumber>>>가 열려는 스트림 수로 설정된 HW_STREAM_OBJECT 버퍼를 제공합니다. pSrb 포인터는 HW_STREAM_REQUEST_BLOCK 구조를 가리킵니다. StreamNumber 는 미니드라이버가 SRB_GET_STREAM_INFO 요청에 대한 응답으로 제공하는 HW_STREAM_DESCRIPTOR 구조 내에서 스트림의 오프셋에 해당합니다. 클래스 드라이버는 열린 스트림이 pSrb-CommandData-OpenFormat >> 에서 제공해야 하는 데이터 형식을 지정합니다.

미니드라이버가 이 요청을 받으면 지정한 스트림을 현재 열 수 있는지 확인해야 합니다. 또한 미니 드라이버는 전달된 KSDATAFORMAT 형식을 확인해야 합니다. SRB의 OpenFormat 필드입니다. 스트림을 열 수 있는 경우 미니 드라이버는 HW_STREAM_OBJECT 구조를 업데이트하고 STATUS_SUCCESS 반환합니다. 최대 스트림 인스턴스 수가 이미 열려 있거나 이 스트림을 여는 데 필요한 하드웨어 리소스를 사용할 수 없는 경우 미니드라이버에서 적절한 오류 상태 반환합니다.

미니 드라이버에서 SRB_OPEN_STREAM 명령을 받으면 미니 드라이버는 다음을 수행해야 합니다.

  1. 최대 스트림 인스턴스 수가 초과되지 않았으며 스트림 인덱스 값이 유효한지 확인합니다.

  2. 요청된 데이터 형식이 이 스트림에 유효한지 확인합니다.

  3. 스트림의 형식을 설정합니다.

  4. 모든 스트림에서 IRP를 취소할 수 있도록 디바이스 확장의 모든 스트림 확장 구조 배열을 유지 관리합니다.

  5. 스트림 개체에서 스트림 데이터 처리기 및 제어 처리기에 대한 포인터를 지정합니다.

  6. 디바이스가 ReceiveDataPacket 루틴에 전달된 데이터 버퍼 주소에 직접 DMA를 수행하는 경우 스트림 개체에서 DMA 플래그를 설정합니다. 드라이버가 논리 주소 지정을 사용하여 전달된 데이터 버퍼에 액세스하는 경우 스트림 개체에서 PIO 플래그도 설정합니다.

  7. 스트림에서 클록 지원을 사용할 수 있는 경우 스트림 개체의 HwClockObject 멤버를 통해 이를 나타냅니다.