AVCSTRM_WRITE
AVCSTRM_WRITE 함수 코드는 지정된 스트림으로 전송할 데이터 버퍼를 제출하는 데 사용됩니다.
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_WRITE 전달합니다.
AVCStreamContext
데이터 쓰기 작업의 대상인 이전 AVCSTRM_OPEN 호출에서 반환된 스트림 컨텍스트(핸들)를 지정합니다.
BufferStruct
쓰기 작업에서 데이터를 가져와야 하는 버퍼를 지정합니다.
하위 단위 드라이버는 먼저 IRP 및 AVC_STREAM_REQUEST_BLOCK 구조를 할당해야 합니다.
다음으로 INIT_AVCSTRM_HEADER 매크로를 사용하여 AVC_STREAM_REQUEST_BLOCK 구조를 초기화하고 AVCSTRM_READ Request 인수로 매크로에 전달해야 합니다.
다음으로 하위 단위 드라이버는 AVCStreamContext 멤버를 쓰기 데이터 작업의 대상인 스트림의 스트림 컨텍스트(핸들)로 설정합니다. 마지막으로 하위 단위 드라이버는 쓰기 작업에서 데이터를 가져오는 버퍼를 설명하는 CommandData 공용 구조체의 BufferStruct 멤버를 설정합니다.
이 요청을 보내기 위해 하위 단위는 IRP의 IoControlCode 멤버가 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를 포함합니다.