媒体传输协议
使用媒体传输协议 (MTP),你可通过 USB 在 Windows 10 IoT 核心版设备之间传输文件。 它允许访问设备的内部存储和 SD 卡(如果存在)。
此功能是 IoT 核心版工具包的一部分,可从 Windows 10 IoT 核心版程序包下载和安装。
如何在运行 Windows 10 IoT 核心版的设备上安装 MTP 功能
使用所需的程序包预配设备
- 启动 PowerShell 或 SSH 并访问运行 Windows 10 IoT 核心版的设备。
- 在 PowerShell 或 SSH 中,执行以下操作:
- 在目标计算机上创建临时文件夹(例如
C:\MTPTemp
)。 - 根据设备的体系结构,将以下程序包从电脑 (
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
- 在
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
- 在目标计算机上创建临时文件夹(例如
- 设备将启动到更新操作系统、安装 MTP 功能,然后重启到 MainOS。
启用 MTP USB 接口
设备返回到 MainOS 后,仍然需要更新 USBFN 配置以包含 MTP。 为此,需要将 MTP 添加到 USBFN 枚举的接口。 USB 注册表设置一文介绍了 USB 配置的详细信息。
虽然可以修改 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN\Configurations\Default
键下可用的默认 USBFN 配置,但建议定义自己的配置,因为它们不会被系统更新覆盖。
使用 MTP 接口创建新的 USBFN 配置
按照以下步骤使用 MTP 添加新配置:
- 在
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN\Configurations
下添加新键。 示例:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN\Configurations\MyConfiguration
。 - 在新键下,创建一个等于
MTP
的REG_MULTI_SZ
值InterfaceList
。 - 在同一键下,创建一个等于
2800000000010400010000000000000000014D545000000000000000000000000000000000000000
的REG_BINARY
值MSOSCompatIdDescriptor
。 - 在
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN
下,添加新REG_SZ
值CurrentConfiguration
,该值等于新创建的键的名称。 在本例中,该值为MyConfiguration
。 - [可选] 在
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\USBFN
下添加一个等于 1 的新REG_DWORD
值IncludeDefaultCfg
。 这样,USB 驱动程序就会枚举默认接口以及 MTP。
注意
如果已在使用自定义配置,则必须对其进行修改,而不是创建新的配置。
将 MTP 接口添加到现有配置
按照以下步骤将 MTP 添加到现有的 USBFN 配置:
- 通过检查
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
下。 - 在当前配置键下,将
\0MTP
添加到InterfaceList
的值。 \0 部分用作InterfaceList
的类型,为REG_MULTI_SZ
,它需要在值之间使用此分隔符。 - 修改
MSOSCompatIdDescriptor
值以包含 MTP 的描述符。 要创建包含当前在InterfaceList
值下的所有接口的有效描述符,请按照此页底部提供的说明文档操作。 OS_Desc_CompatID.doc 提供了描述符格式的说明,并提供了在描述符中包含多个接口的示例。 MTP 的兼容和子兼容性的 ID 也在同一页上提供,并用于其中一个示例。
如何在自定义 FFU 中包含 MTP
- 将 IOT_MTP 功能 ID 添加到 OEM 输入文件。 这相当于按照“使用所需程序包预配设备”部分中的步骤操作。
- 请确保应用与“使用 MTP 接口创建新的 USBFN 配置”部分中提到的相同的注册表更改。 请按照这些说明了解如何将注册表更改应用于 FFU。
- 创建映像\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 卡。
有关使用特定注册表项自定义映像的详细信息,请参阅此链接。