다음을 통해 공유


AVC_FUNCTION_GET_REQUEST

AVC_FUNCTION_GET_REQUEST 함수 코드는 AV/C 단위 및 하위 단위 요청을 수신하기 위해 등록하는 데 사용됩니다.

I/O 상태 블록

이 함수는 항상 Irp-IoStatus.Status>를 STATUS_PENDING 설정합니다.

의견

이 함수는 아래와 같이 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_GET_REQUEST 설정해야 합니다.

SubunitAddrFlag
단위 명령을 수신하도록 등록할 때만 사용됩니다. 이를 1로 설정하고 SubunitAddr 매개 변수에 단위 주소를 제공합니다. 하위 단위 요청의 경우 완료 시 1로 설정되고 SubunitAddr 매개 변수는 이 가상 하위 단위 instance 대한 하위 단위 주소를 포함하는 메모리를 가리킵니다. 호출자는 이 페이지가 없는 메모리에 액세스할 수 있지만 해제를 시도해서는 안 됩니다.

AlternateOpcodesFlag
단위 명령을 수신하도록 등록할 때만 사용됩니다. 이 값을 1로 설정하고 AlternateOpcodes 매개 변수에서 호출자가 지원하는 opcode 목록을 제공합니다.

TimeoutFlag
무시됩니다.

RetryFlag
무시됩니다.

CommandType
입력에서 무시됩니다. 출력 시 CommandType 멤버는 AvcCommandType 열거형의 값 중 하나로 설정됩니다.

ResponseCode
요청에 대해 무시됩니다.

SubunitAddr
단위 명령을 수신하도록 등록할 때만 사용됩니다. 1394 무역 협회 AV/C 디지털 인터페이스 명령 집합 일반 사양인 Rev 3.0(0xff)의 섹션 5.3.3에 따라 인코딩된 단위 주소를 포함하는 페이지가 없는 메모리의 주소로 설정합니다. 하위 단위 요청의 경우 완료 시 이 가상 하위 단위 instance 대한 하위 단위 주소가 포함된 메모리를 가리킵니다. 호출자는 이 페이지가 없는 메모리에 액세스할 수 있지만 해제를 시도해서는 안 됩니다.

AlternateOpcodes
단위 명령을 수신하도록 등록할 때만 사용됩니다. 호출자가 지원하는 단위 opcode 목록을 포함하는 페이지가 없는 메모리의 주소로 설정합니다. opcode 목록의 첫 번째 바이트는 따라야 하는 opcode의 수입니다(바이트 수와 동일). 대체 opcode 목록을 포함하는 메모리의 총 길이는 AlternateOpcodes[0]+1입니다.

Timeout
무시됩니다.

재시도
무시됩니다.

Opcode
입력 시 무시됩니다. 출력 시 AV/C 단위 opcode가 포함됩니다. AlternateOpcodes를 통해 지정된 opcode 중 하나입니다.

OperandLength
입력 시 무시됩니다. 출력 시 요청에서 사용하는 피연산자 목록의 바이트 수로 설정됩니다.

피연산자
입력 시 무시됩니다. 출력에서 이 매개 변수는 요청의 피연산자 목록을 포함합니다.

NodeAddress
입력 시 무시됩니다. 출력 시 요청 원본의 노드 주소로 설정됩니다. 이 매개 변수는 응답을 보낼 때 사용됩니다(자세한 내용은 AVC_FUNCTION_SEND_RESPONSE 참조).

생성
입력 시 무시됩니다. 출력에서 이 값은 노드 주소가 유효한 것으로 간주될 때 적용된 생성 횟수로 설정됩니다. 이 매개 변수는 응답을 보낼 때 사용됩니다(자세한 내용은 AVC_FUNCTION_SEND_RESPONSE 참조).

GUID_AVC_CLASS 디바이스 인터페이스의 컨텍스트에서 AVC_FUNCTION_GET_REQUEST 함수 코드는 AV/C 단위 요청만 수신하도록 등록하는 데 사용됩니다(하위 단위 요청이 아님). 이 함수는 일반적으로 상위 필터 드라이버( avc.sys FDO)에서 피어 디바이스 기능(즉, 비가상 스택에서 대상 디바이스의 단위 요청을 처리)을 지원하는 데 사용됩니다. 하위 단위 드라이버가 단위 요청을 처리하기 위해 등록하는 것을 방지하는 것은 없지만 동일한 단위 opcode를 지원하기 위해 등록하는 하위 단위 드라이버 인스턴스는 상태 정보를 공유하기 위해 서로 협력해야 합니다. Avc.sys 동일한 단위 opcode에 대해 여러 등록을 직접 지원하지 않습니다.

이 함수는 AVC_COMMAND_IRB 구조를 사용합니다. 이 구조체는 AV/C 명령 요청의 공통 구성 요소를 정의합니다. 유효한 입력 매개 변수는 SubunitAddrFlag, AlternateOpcodesFlag, AlternateOpcodesSubunitAddr뿐이며 모두 필요합니다. AlternateOpcodes는 호출자가 지원하는 단위 opcode 목록을 포함하는 버퍼를 가리킵니다. SubunitAddr 는 단위 주소(0xff)가 포함된 버퍼를 가리킵니다.

avc.sys가상 인스턴스(즉, GUID_VIRTUAL_AVC_CLASS 디바이스 인터페이스를 등록하는 인스턴스) 의 경우 AVC_FUNCTION_GET_REQUEST AV/C 단위 및 하위 단위 요청을 수신하기 위해 등록하는 데 사용됩니다. 상위 필터 드라이버(가상 avc.sys FDO)는 일반적으로 단위 요청을 처리하기 위해 등록하고 하위 단위 드라이버는 특정 유형의 하위 단위에 대한 요청을 처리하기 위해 등록합니다. 하위 단위 드라이버가 단위 요청을 처리하기 위해 등록하는 것을 방지하는 것은 없지만 동일한 단위 opcode를 지원하기 위해 등록하는 하위 단위 드라이버 인스턴스는 상태 정보를 공유하기 위해 서로 협력해야 합니다. Avc.sys 동일한 단위 opcode에 대해 여러 등록을 직접 지원하지 않습니다.

하위 단위 드라이버는 하위 단위 관련 요청을 수신하도록 등록할 때 입력 매개 변수를 설정하지 않습니다.

이 함수는 항상 STATUS_PENDING 반환하므로 모든 처리는 완료 루틴에서 수행해야 합니다. 완료되면 AVC_COMMAND_IRB 구조체는 요청의 opcode 및 피연산자를 보유합니다. AV/C 프로토콜을 사용하려면 응답을 100ms 이내에 보내야 합니다. 이 작업은 AVC_FUNCTION_SEND_RESPONSE 함수를 사용하여 완료 루틴에서 수행할 수 있습니다.

첫 번째 응답이 avcResponseType 열거형에서 AVC_RESPONSE_INTERIM 응답 코드를 사용하는 경우 후속 처리가 필요합니다. AVC_FUNCTION_GET_REQUEST 원래 함수를 완료하여 얻은 NodeAddressGeneration 멤버는 후속 응답에서 사용해야 합니다. 어쨌든 다음 단위 요청을 받을 수 있도록 초기 AVC_FUNCTION_SEND_RESPONSE 완료 루틴에서 반환하기 전에 다음 AVC_FUNCTION_GET_REQUEST 함수를 제출해야 합니다.

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

이 함수 코드는 IRQL <= DISPATCH_LEVEL 호출될 수 있습니다.

추가 정보

AVC_FUNCTION_SEND_RESPONSE

AvcResponseCode

AVC_FUNCTION

RtlZeroMemory