다음을 통해 공유


AVCSTRM_READ

AVCSTRM_READ 함수 코드는 지정된 스트림의 데이터로 채워진 데이터 버퍼 avcstrm.sys 제출하는 데 사용됩니다.

I/O 상태 블록

성공하면 avcstrm.sysIrp-IoStatus.Status>를 STATUS_SUCCESS 설정합니다.

가능한 오류 반환 값은 다음과 같습니다.

오류 상태 Description
STATUS_DEVICE_REMOVED AVCSTRM_READ 작업에 해당하는 디바이스가 더 이상 존재하지 않습니다.
STATUS_CANCELLED 요청을 완료할 수 없습니다.
STATUS_INVALID_PARAMETER IRP에 지정된 매개 변수가 올바르지 않습니다.
STATUS_INSUFFICIENT_RESOURCES 요청을 완료하기에 충분한 시스템 리소스가 없습니다.
STATUS_PENDING 요청이 수신되었지만 추가 처리가 필요합니다. I/O 완료 루틴은 최종 응답을 처리합니다.

AVC_STREAM_REQUEST_BLOCK 입력

SizeOfThisBlock, 버전 및 함수
INIT_AVCSTRM_HEADER 매크로를 사용하여 이러한 멤버를 초기화합니다. 매크로의 Request 인수에 AVCSTRM_READ 전달합니다.

AVCStreamContext
읽기 작업의 데이터 원본인 이전 AVCSTRM_OPEN 호출에서 반환된 스트림 컨텍스트(핸들)를 지정합니다.

BufferStruct
읽기 작업에서 데이터를 배치해야 하는 버퍼를 지정합니다.

하위 단위 드라이버는 먼저 IRP 및 AVC_STREAM_REQUEST_BLOCK 구조를 할당해야 합니다.

다음으로 INIT_AVCSTRM_HEADER 매크로를 사용하여 AVC_STREAM_REQUEST_BLOCK 구조를 초기화하고 AVCSTRM_READ 매크로에 Request 인수로 전달해야 합니다.

다음으로 하위 단위 드라이버는 AVCStreamContext 멤버를 읽을 데이터를 제공하는 스트림의 스트림 컨텍스트(핸들)로 설정합니다. 마지막으로 하위 단위 드라이버는 읽기 작업에서 데이터를 배치하는 버퍼를 설명하는 CommandData 공용 구조체의 BufferStruct 멤버를 설정합니다.

이 요청을 보내기 위해 하위 단위는 IRPIoControlCode 멤버가 IOCTL_AVCSTRM_CLASS 설정되고 IRP의 Argument1 멤버가 수행되는 읽기 작업을 설명하는 AVC_STREAM_REQUEST_BLOCK 구조로 설정된 IRP_MJ_INTERNAL_DEVICE_CONTROL IRP를 제출합니다.

이 명령은 비동기적으로 완료됩니다. 완료되면 IRP에서 설정된 I/O 완료 루틴이 호출됩니다.

이 함수 코드는 IRQL = PASSIVE_LEVEL 호출해야 합니다.

의견

이 함수는 아래와 같이 AVC_STREAM_REQUEST_BLOCK 구조체에서 CommandData 공용 구조체의 BufferStruct 멤버를 사용합니다.

typedef struct _AVC_STREAM_REQUEST_BLOCK {
  ULONG  SizeOfThisBlock;
  ULONG  Version;
  AVCSTRM_FUNCTION  Function;
  .
  .
  PVOID AVCStreamContext;
  .
  .
  union _tagCommandData {
    .
    .
    AVCSTRM_BUFFER_STRUCT  BufferStruct;
    .
    .
  } CommandData;
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;

요구 사항

헤더:avcstrm.h에 선언되었습니다. avcstrm.h를 포함합니다.

참고 항목

AVC_STREAM_REQUEST_BLOCK

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_BUFFER_STRUCT

AVCSTRM_FUNCTION