다음을 통해 공유


AVC_FUNCTION_COMMAND

AVC_FUNCTION_COMMAND 함수 코드는 AV/C 요청을 보내고 응답을 하나의 작업으로 수신하는 데 사용됩니다.

I/O 상태 블록

성공하면 AV/C 프로토콜 드라이버는 Irp-IoStatus.Status>를 STATUS_SUCCESS 설정합니다.

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

반환 값 설명
STATUS_TIMEOUT 요청이 이루어졌지만 모든 시간 제한 및 재시도 처리가 완료되기 전에는 응답을 받지 못했습니다. 대상 디바이스는 이전 요청이 여전히 처리 중인 경우 요청을 무시합니다. 일부 AV/C 디바이스는 규정을 준수하지 않으며 여러 번의 연속 시도 후에도 100ms 제한 시간 내에 응답을 거부합니다. AVC_COMMAND_IRB 구조는 기본 시간 제한재시도 멤버(각각 100ms 및 9)의 조정을 허용하지만 이러한 기본 설정은 알려진 모든 구현에 충분했습니다.
STATUS_PENDING 요청이 이루어졌고 중간 응답이 수신되었습니다. 최종 응답을 처리하고 IRP 및 IRB 리소스를 해제하는 것은 완료 루틴의 책임입니다.
STATUS_REQUEST_ABORTED AV/C 요청을 제출할 때 IRP 완료 상태 STATUS_REQUEST_ABORTED 즉시 중단합니다.
상태_* 다른 반환 코드는 AV/C 프로토콜의 scope 초과한 오류 또는 경고가 발생했음을 나타냅니다.

의견

이 함수는 아래와 같이 AVC_COMMAND_IRB 구조를 사용합니다.

typedef struct _AVC_COMMAND_IRB {
  AVC_IRB  Common;
  UCHAR  SubunitAddrFlag : 1;
  UCHAR  AlternateOpcodesFlag : 1;
  UCHAR  TimeoutFlag : 1;
  UCHAR  RetryFlag : 1;
  union {
    UCHAR  CommandType;
    UCHAR  ResponseCode;
  };
  PUCHAR  SubunitAddr;
  PUCHAR  AlternateOpcodes;
  LARGE_INTEGER  Timeout;
  UCHAR  Retries;
  UCHAR  Opcode;
  ULONG  OperandLength;
  UCHAR  Operands[MAX_AVC_OPERAND_BYTES];
  NODE_ADDRESS  NodeAddress;
  ULONG  Generation;
} AVC_COMMAND_IRB, *PAVC_COMMAND_IRB;

요구 사항

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

AVC_COMMAND_IRB 입력

일반
이 멤버의 함수 하위 멤버는 AVC_FUNCTION 열거형에서 AVC_FUNCTION_COMMAND 설정해야 합니다.

SubunitAddrFlag
하위avc.sys드라이버 와 연결하는 하위 단위 주소를 재정의하려면 이 주소를 1로 설정합니다. 재정의해야 하는 이유는 하위 단위 드라이버가 단일 instance 여러 하위 단위를 나타내거나, 단위 명령을 보내야 합니다. 또는 avc.sys 하위 단위 형식 또는 ID를 확인할 수 없기 때문에 드라이버가 로드되었습니다. 이 설정이 설정된 경우 SubunitAddr 멤버는 원하는 하위 단위 주소를 포함하는 페이지가 없는 메모리를 가리킵니다.

호출자가 avc.sys FDO에 직접 요청을 제출하는 경우 이를 하나(및 제공된 적절한 SubunitAddr)로 설정해야 합니다.

참고

요청에 이 플래그가 설정되지 않은 경우 성공적인 요청의 응답에 따라 이 플래그가 설정되고 SubunitAddr 멤버는 하위 단위의 실제 주소를 가리킵니다. 콘텐츠를 변경하거나 메모리를 해제하지 마세요. 부모 드라이버의 디바이스 확장에 속합니다. 물론 이 값은 0으로 다시 설정되고 SubunitAddr 포인터가 지워서 다른 하위 단위에 구조를 다시 사용할 수 있습니다.

AlternateOpcodesFlag 이 요청의 명령 형식 및 opcode로 인해 다른 opcode가 있는 응답이 발생하는 경우 이를 1로 설정합니다. 이 항목이 없으면 opcode가 일치하는 응답만 수락됩니다. 이 설정이 설정된 경우 AlternateOpcodes 멤버는 대체 opcode 목록을 포함하는 페이지가 없는 메모리에 대한 포인터여야 합니다.

TimeoutFlag
기본 시간 초과가 하위 단위에 적합하지 않은 경우 이를 1로 설정합니다. 이 설정이 설정되면 시간 제한 멤버를 원하는 시간 제한(100-ns 단위)으로 설정해야 합니다.

RetryFlag
기본 재시도 횟수가 하위 단위에 적합하지 않은 경우 이 값을 1로 설정합니다. 이 값을 설정하면 Retries 멤버를 원하는 재시도 횟수로 설정해야 합니다.

CommandType 요청 시 이 멤버는 AvcCommandType 열거자 중 하나로 설정해야 합니다. 필수 매개 변수입니다.

ResponseCode 응답 시 이 멤버는 AvcResponseCode 열거형의 값으로 설정됩니다.

SubunitAddr
1394 무역 협회 AV/C 디지털 인터페이스 명령 집합 일반 사양인 Rev 3.0의 섹션 5.3.3에 따라 인코딩된 원하는 하위 단위 주소를 포함하는 페이지가 없는 메모리의 주소로 설정합니다. 하위 단위 주소 인코딩이 이를 의미하므로 길이가 필요하지 않습니다. SubunitAddrFlag가 0인 경우 이 매개 변수는 무시됩니다.

AlternateOpcodes 원하는 대체 opcode 목록을 포함하는 페이지가 없는 메모리의 주소로 설정합니다. opcode 목록의 첫 번째 바이트는 따라야 하는 opcode의 수입니다(바이트 수와 동일). 대체 opcode 목록을 포함하는 메모리의 총 길이는 AlternateOpcodes[0]+1입니다. AlternateOpcodesFlag가 0인 경우 이 매개 변수는 무시됩니다.

Timeout
100-ns 단위로 원하는 시간 제한으로 설정합니다. 예를 들어 기본 제한 시간 값은 Timeout.QuadPart = 1000000(100ns 단위의 100ms)입니다. TimeoutFlag가 0인 경우 이 매개 변수는 무시됩니다.

재시도avc.sys응답 없이 시간 초과 후 요청을 다시 시도해야 하는 횟수를 원하는 횟수로 설정합니다. 재시도 횟수가 0이면 요청이 한 번 시도됨을 의미합니다. 응답을 받지 않고 명령을 처리하는 데 소요된 총 시간은 다음 수식으로 계산됩니다.

시간 제한 * (다시 시도 + 1)

RetryFlag가 0인 경우 이 매개 변수는 무시됩니다.

Opcode 이를 원하는 AV/C opcode(하위 단위 형식에 적합)로 설정합니다. 필수 매개 변수입니다. 응답에서 AlternateOpcodesFlag 가 설정되었고 응답과 일치하는 대체 opcode 중 하나가 사용된 경우 이 값은 해당 대체 opcode로 설정됩니다.

OperandLength
피연산자를 연산자 멤버에 저장하는 데 사용되는 바이트 수로 설정합니다. 필수 매개 변수입니다. 응답 시 이 매개 변수는 응답에서 사용하는 피연산자 목록의 바이트 수로 설정됩니다.

피연산자
하위 단위 형식 및 opcode에 적합한 피연산자 목록으로 설정합니다. 필수 매개 변수입니다. 응답에서 이 매개 변수는 응답의 피연산자 목록을 포함합니다.

NodeAddress 예약. 0이어야 합니다.

생성
예약되어 있습니다. 0이어야 합니다.

AVC_FUNCTION_COMMAND 함수 코드는 avc.sys가상 인스턴스에서 지원되지 않습니다. 호출자가 외부 디바이스를 제어하려는 경우 해당 디바이스의 비가상 instance 프라이빗 메커니즘을 통해 또는 IOCTL_AVC_CLASS I/O 제어 코드의 AVC_FUNCTION_FIND_PEER_DO, AVC_FUNCTION_PEER_DO_LISTAVC_FUNCTION_GET_SUBUNIT_INFO 함수 코드의 일부 조합을 통해 배치할 수 있습니다.

이 구조체는 AV/C 명령 요청의 공통 구성 요소를 정의합니다. 요청의 opcode 및 피연산자와 응답의 opcode 및 피연산자를 보유합니다(완료 시). 피연산자 목록의 크기는 1 바이트 하위 단위 주소가 지정된 최대 허용 피연산자 수로 고정됩니다. 하위 단위 주소가 어떤 방식으로든 확장되면 그에 따라 허용되는 최대 피연산자 바이트 수가 줄어듭니다.

이 구조체를 사용하는 것이 좋습니다. 매개 변수를 채우기 전에 먼저 구조체( RtlZeroMemory 사용)를 0으로 지정하는 것입니다.

IRQL = PASSIVE_LEVEL 호출해야 합니다.

추가 정보

AVC_FUNCTION

AvcCommandType

AvcResponseCode

AVC_FUNCTION_FIND_PEER_DO

AVC_FUNCTION_PEER_DO_LIST

AVC_FUNCTION_GET_SUBUNIT_INFO