媒体传输协议

使用媒体传输协议 (MTP),你可通过 USB 在 Windows 10 IoT 核心版设备之间传输文件。 它允许访问设备的内部存储和 SD 卡(如果存在)。

此功能是 IoT 核心版工具包的一部分,可从 Windows 10 IoT 核心版程序包下载和安装。

如何在运行 Windows 10 IoT 核心版的设备上安装 MTP 功能

使用所需的程序包预配设备

  1. 启动 PowerShellSSH 并访问运行 Windows 10 IoT 核心版的设备。
  2. 在 PowerShell 或 SSH 中,执行以下操作:
    1. 在目标计算机上创建临时文件夹(例如 C:\MTPTemp)。
    2. 根据设备的体系结构,将以下程序包从电脑 (C:\Program Files (x86)\Windows Kits\10\MSPackages\Retail\<arch>\fre) 复制到 C:\MTPTemp
      • Microsoft-OneCoreUAP-Mtp-UserService-Package.cab
      • Microsoft-OneCoreUAP-Mtp-UserService-Package_Lang_en-US.cab
      • Microsoft-WindowsStorSvc-API-Schema-Extension-Package.cab
      • Microsoft-WindowsStorSvc-API-Schema-Extension-Package_Lang_en-US.cab
    3. C:\MTPTemp 中运行以下命令,以将程序包安装到 IoT 设备的系统映像:
      • ApplyUpdate.exe -stage Microsoft-OneCoreUAP-Mtp-UserService-Package.cab
      • ApplyUpdate.exe -stage Microsoft-OneCoreUAP-Mtp-UserService-Package_Lang_en-US.cab
      • ApplyUpdate.exe -stage Microsoft-WindowsStorSvc-API-Schema-Extension-Package.cab
      • ApplyUpdate.exe -stage Microsoft-WindowsStorSvc-API-Schema-Extension-Package_Lang_en-US.cab
      • ApplyUpdate.exe -commit
  3. 设备将启动到更新操作系统、安装 MTP 功能,然后重启到 MainOS。

启用 MTP USB 接口

设备返回到 MainOS 后,仍然需要更新 USBFN 配置以包含 MTP。 为此,需要将 MTP 添加到 USBFN 枚举的接口。 USB 注册表设置一文介绍了 USB 配置的详细信息。

虽然可以修改 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN\Configurations\Default 键下可用的默认 USBFN 配置,但建议定义自己的配置,因为它们不会被系统更新覆盖。

使用 MTP 接口创建新的 USBFN 配置

按照以下步骤使用 MTP 添加新配置:

  1. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN\Configurations 下添加新键。 示例:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN\Configurations\MyConfiguration
  2. 在新键下,创建一个等于 MTPREG_MULTI_SZInterfaceList
  3. 在同一键下,创建一个等于 2800000000010400010000000000000000014D545000000000000000000000000000000000000000REG_BINARYMSOSCompatIdDescriptor
  4. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN 下,添加新 REG_SZCurrentConfiguration,该值等于新创建的键的名称。 在本例中,该值为 MyConfiguration
  5. [可选] 在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN 下添加一个等于 1 的新 REG_DWORDIncludeDefaultCfg。 这样,USB 驱动程序就会枚举默认接口以及 MTP。

注意

如果已在使用自定义配置,则必须对其进行修改,而不是创建新的配置。

将 MTP 接口添加到现有配置

按照以下步骤将 MTP 添加到现有的 USBFN 配置:

  1. 通过检查 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN 下的 CurrentConfiguration 值查找当前配置。 如果值存在,则可在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN\Configurations\[CurrentConfiguration] 下找到当前配置。 否则就在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN\Configurations\Default 下。
  2. 在当前配置键下,将 \0MTP 添加到 InterfaceList 的值。 \0 部分用作 InterfaceList 的类型,为 REG_MULTI_SZ,它需要在值之间使用此分隔符
  3. 修改 MSOSCompatIdDescriptor 值以包含 MTP 的描述符。 要创建包含当前在 InterfaceList 值下的所有接口的有效描述符,请按照此页底部提供的说明文档操作。 OS_Desc_CompatID.doc 提供了描述符格式的说明,并提供了在描述符中包含多个接口的示例。 MTP 的兼容和子兼容性的 ID 也在同一页上提供,并用于其中一个示例。

如何在自定义 FFU 中包含 MTP

  1. 将 IOT_MTP 功能 ID 添加到 OEM 输入文件。 这相当于按照“使用所需程序包预配设备”部分中的步骤操作。
  2. 请确保应用与“使用 MTP 接口创建新的 USBFN 配置”部分中提到的相同的注册表更改。 请按照这些说明了解如何将注册表更改应用于 FFU。
  3. 创建映像\FFU。 有关说明,请阅读此文

警告

不应通过 FFU 自定义来尝试修改默认配置。 系统定义的条目可能会由系统更新刷新/更改,任何自定义设置都将丢失。

如何安装 MTP SD 卡筛选器

默认情况下,MTP 将枚举 SD 卡的所有内容(如果设备上存在)。 但是,可以将此枚举限制为特定的子文件夹。 为此,必须在注册表项 HKEY_LOCAL_MACHINE\Software\Microsoft\MTP 下添加注册表值 MTPSDFolderFilter。 该值的类型为 REG_SZ,并且应包含要 MTP 枚举的文件夹的相对路径。 如果文件夹尚不存在,则会自动创建该文件夹。

示例路径:

  • \FirstLevelDirectory;
  • FirstLevelDirectory;
  • \FirstLevelDirectory\SecondLevelDirectory;
  • Never\Before\Created\Directory。

警告

请勿使用包含驱动器号的绝对路径(如 C:\Some\Folder\Path)- 这可能会阻止枚举 SD 卡。

有关使用特定注册表项自定义映像的详细信息,请参阅此链接