支持 MTP 扩展

媒体传输协议

媒体传输协议 (MTP) 是 PTP) (图片传输协议的扩展。 因此,所有 PTP 协议语义在 MTP 中都是有效的。

MTP 使用两方、发起方和响应方之间的命令和响应进行通信。 相关设备的角色定义非常明确。 电脑通常是发起方,设备始终是响应方。 非电脑设备也可能是发起程序 (例如汽车甲板或 Microsoft X 盒) 。 设备永远不能同时承担这两个角色。

发起方通过向响应方发送命令来开始通信。 响应方处理命令并发回相应的响应。 可能存在与命令关联的数据阶段。 如果是这种情况,则必须事先知道数据流的方向,并被发起方和响应方接受。 请注意,没有说明性标头指示新命令的数据流。

响应方可以独立于发起方启动通信。 例如,响应方可以将事件发送到发起方。 但是,不能将任何数据与 事件一起发送。 如果有任何数据需要作为事件的一部分读取,发起方必须发送 MTP 命令,然后设备可以发送数据以响应该命令。

有关 MTP 的完整说明,请参阅 MTP 规范

发送 MTP 命令

应用程序可以通过调用 IPortableDevice::SendCommand 方法将 MTP 命令发送到设备。 发送的命令取决于是否存在数据阶段,以及是否从设备读取或写入任何随附的数据。 下表描述了三个可能的 MTP 扩展命令。

请注意,这些命令特定于 MTP;因此, 和 仅由 WPD MTP 类驱动程序实现。

命令 说明
WPD_COMMAND_MTP_EXT_END_DATA_TRANSFER 发出一个 MTP 命令,该命令指示数据读取或写入操作的结束。
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITHOUT_DATA_PHASE 发出没有相应数据阶段的 MTP 命令。
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITH_DATA_TO_WRITE 发出 MTP 命令,该命令后跟随附的数据,该数据将写入设备。
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITH_DATA_TO_READ 发出 MTP 命令,该命令后跟从设备读取的随附数据。
WPD_COMMAND_MTP_EXT_READ_DATA 发出将数据从设备发送到电脑的 MTP 命令。
WPD_COMMAND_MTP_EXT_WRITE_DATA 发出从电脑向设备发送数据的 MTP 命令。

 

无论阶段如何,都必须指定 WPD_PROPERTY_MTP_EXT_OPERATION_CODEWPD_PROPERTY_MTP_EXT_OPERATION_PARAMS

如果 MTP 驱动程序能够将命令发送到设备,则返回值将始终包含 WPD_PROPERTY_MTP_EXT_RESPONSE_CODE。 如果响应代码指示成功,并且命令的语义允许响应参数, WPD_PROPERTY_MTP_EXT_RESPONSE_PARAMS 也将可用。

编程指南