(mtpext.h) MTP_COMMAND_DATA_IN 结构

MTP_COMMAND_DATA_IN 结构包含媒体传输协议 (MTP) 使用 IWMDMDevice3::D eviceIoControl 方法发送到设备的自定义命令。

语法

typedef struct _MTP_COMMAND_DATA_IN {
  WORD  OpCode;
  DWORD NumParams;
  DWORD Params[MTP_COMMAND_MAX_PARAMS];
  DWORD NextPhase;
  DWORD CommandWriteDataSize;
  BYTE  CommandWriteData[1];
} MTP_COMMAND_DATA_IN, *PMTP_COMMAND_DATA_IN;

成员

OpCode

操作代码。

NumParams

传入的参数数。

Params[MTP_COMMAND_MAX_PARAMS]

命令的参数。 MTP_COMMAND_MAX_PARAMS 是一个定义的常量,值为 5。

NextPhase

指示命令是具有读取数据阶段、写入数据阶段还是无数据阶段。 下表中定义了有效值。

CommandWriteDataSize

CommandWriteData[1]的数据大小,以字节为单位。

CommandWriteData[1]

如果 下一个MTP_NEXTPHASE_WRITE_DATA ,则为要写入设备的数据的第一个字节(可选)。

注解

输入缓冲区应包含适当填充 MTP_COMMAND_DATA_IN 结构。 退出时,设备驱动程序将填写 MTP_COMMAND_DATA_OUT 结构并将其保存到输出缓冲区。 因此,任何请求的输入缓冲区必须至少为 SIZEOF_REQUIRED_COMMAND_DATA_IN 字节,这定义为

#define SIZEOF_REQUIRED_COMMAND_DATA_IN (sizeof(MTP_COMMAND_DATA_IN)-1)

和至少SIZEOF_REQUIRED_COMMAND_DATA_OUT个字节的输出缓冲区,定义为

#define SIZEOF_REQUIRED_COMMAND_DATA_OUT (sizeof(MTP_COMMAND_DATA_OUT)-1)

假定所有命令都是自包含的,也就是说,可以在一次调用中完全处理它们。 这会影响长时间的数据传输,因为不支持传统意义上的分块。 (例如,若要发出 3megabytes 的读取,调用方必须确保分配 3 MB 外加SIZEOF_REQUIRED_COMMAND_DATA_OUT字节的输出缓冲区。) 长数据传输不应使用此方法完成,而应通过普通数据传输 API 完成。

要求

要求
Header mtpext.h

另请参阅