AVC_FUNCTION_SEND_RESPONSE
AVC_FUNCTION_SEND_RESPONSE函数代码用于响应 AV/C 单元和子单元请求。
I/O 状态块
如果成功,AV/C 协议驱动程序可将 Irp-IoStatus.Status> 设置为:
STATUS_SUCCESS是否由于原始请求以来的一个或多个总线重置而放弃响应,或者
STATUS_PENDING如果成功将响应传递到 61883.sys (则意味着成功传递到请求发起方)
可能的其他返回值包括:
返回值 | 说明 |
---|---|
STATUS_INSUFFICIENT_RESOURCES | 内部缓冲区分配失败。 |
注释
此函数使用 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 输入
通用
此成员的 Function 子成员必须设置为 从 AVC_FUNCTION 枚举AVC_FUNCTION_SEND_RESPONSE。
SubunitAddrFlag
将 设置为从 完成AVC_FUNCTION_GET_REQUEST 获取的值。
AlternateOpcodesFlag
已忽略。
TimeoutFlag
已忽略。
RetryFlag
已忽略。
CommandType
忽略响应。
ResponseCode
此成员必须设置为 AvcResponseCode 枚举中的值之一。
SubunitAddr
将 设置为从 完成AVC_FUNCTION_GET_REQUEST 获取的值。
AlternateOpcodes
已忽略。
超时
已忽略。
重试
已忽略。
操作码
这必须包含适用于响应的 AV/C 单元操作码, (可能与原始请求) 中提供的操作码不同。
OperandLength
将 设置为响应的操作数列表中的字节数。
操作数
响应的操作数列表。
NodeAddress
原始请求的源的节点地址。
代系
从原始请求获取的生成 ID。
在 GUID_AVC_CLASS 设备接口的上下文中, AVC_FUNCTION_SEND_RESPONSE 函数代码用于仅响应 AV/C 单元请求。
对于 avc.sys (的虚拟实例(即注册GUID_VIRTUAL_AVC_CLASS设备接口) 的实例), AVC_FUNCTION_SEND_RESPONSE 函数代码用于响应 AV/C 单元 和 子单元请求。
如果第一个响应使用从 AvcResponseType 枚举) (AVC_RESPONSE_INTERIM响应代码,则需要进行后续处理。 完成AVC_FUNCTION_GET_REQUEST原始函数后获得的 NodeAddress 和 Generation 成员必须在后续响应中使用。 在任何情况下,应在从初始 AVC_FUNCTION_SEND_RESPONSE 完成例程返回之前提交下一 个AVC_FUNCTION_GET_REQUEST 函数,以便可以接收下一个单元请求。
此结构的建议用途是使用原始请求的内容,并根据需要为响应更新 Opcode、 OperandLength 和 Operands 成员。
可以在 IRQL >= DISPATCH_LEVEL 调用此函数代码。