AVC_FUNCTION_SEND_RESPONSE
AVC_FUNCTION_SEND_RESPONSE 関数コードは、AV/C ユニット要求とサブユニット要求に応答するために使用されます。
I/O ステータス ブロック
成功した場合、AV/C プロトコル ドライバーは Irp->IoStatus.Status を次のいずれかに設定できます。
元の要求以降の 1 つ以上のバス のリセットによってカード応答が解除された場合、STATUS_SUCCESS、または
応答が 61883.sys に正常に配信された場合、STATUS_PENDING にします (要求イニシエーターへの正常な配信を意味します)。
その他の戻り値は次のとおりです
戻り値 | 説明 |
---|---|
STATUS_INSUFFICIENT_RESOURCES | 内部バッファー割り振りに失敗しました。 |
Comments
この関数では、次に示すように 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 で呼び出される場合があります。