联系方式    |    在线留言 您好,欢迎访问这里是欧亚体育官网!

欧亚体育

客服热线400-123-4567
行业新闻

欧亚体育苹果USB低级过滤器可帮助控制操作系统使用USB配置(下)

作者:小编    发布时间:2023-11-18 08:53:41    浏览量:

  欧亚体育欧亚体育本文中,我们将重点讨论为什么 iphone 没有像我们期望的使用 MTP 协议的设备那样提供一整套存储操作,还将研究 USB 接口类 / 子类和 WPD_DEVICE_PROTOCOL 属性之间不匹配的原因。为了回答这些问题,我们将了解如何创建 WPD 设备、如何 挂载 存储以及如何设置 WPD 属性。

  考虑到 iPhone 中的 WPD 协议属性,我们期望有一组更丰富的选项来与设备交互,可以通过查看设备的接口描述符来快速回答为什么 iPhone 表现为 PTP 设备。

欧亚体育苹果USB低级过滤器可帮助控制操作系统使用USB配置(下)

  iPhone 和小米在 PTP 和 MTP 模式下的描述如下:iPhone 有多种配置,但无论选择哪一种,创建 WPD 的接口 PDO 总是包含类 6 和子类 1 的接口过滤器

  尽管已经回答了最大的问题欧亚体育,但仍然有一些细节,比如为什么 iPhone 不允许创建或复制任何东西到它,而另一方面,小米即使使用 PTP 也允许创建对象,所以对于喜欢深入了解事物的人来说,仅仅浏览界面描述是不够的。

  从上面提到的三个二进制文件中,WpdMtpDr 是将在 WUDFHost 中运行的主要 WPD MTP 驱动程序。这是一个 UMDFv1 驱动程序,它将基于 COM 并用 C++ 编写,基于 WpdWudfSampleDriver,几乎就不需要逆转,但该驱动程序没有更新为使用 UMDFv2,因为 UMDFv1 几乎已经被弃用,并且几乎不支持新功能。

  如上所述,入口点是 OnDeviceAdd 例程。在这个函数中,创建了 CDevice 对象,它将我们带到 CDevice::OnPrepareHardware 例程,在该例程中,通过调用 WpdBaseDriver::Initialize 来初始化 WpdBaseDriver。不幸的是,这是 Sample 代码和 WpdMtpDr 开始出现差异的部分。示例代码没有真正的设备可以通信,但在本文的示例中,WpdMtp.dll 的作用所在,充当 WpdMtpDr 和真正设备之间的粘合剂。MTP 核心库包含 CMtpDevice 类,它表示真实的设备。在 WpdBaseDriver 初始化期间,加载 MTP 核心库,并打开与设备的会话,如以下简化代码片段所示:

  加载 MTP 核心模块后,触发初始化例程来检索 MTP DeviceInfo Dataset。这是发送到设备的初始 MTP 请求之一,DeviceInfo 结构在其返回时填充。值得注意的是,该结构包含关键信息,如模型、制造商和各种 MTP 版本标识符。这些信息在稍后设置 WPD 属性时起着至关重要的作用。

  MTP 核心发送请求并将响应解析为 CDeviceInfo 结构,而 WpdMtpDr 利用缓存系统存储指向 WpdMtp 返回的类的 COM 指针。这种方法可以防止频繁地向设备重新发出 PTP/MTP 请求,从而优化 I/O 操作。

  在 UM 中,WPD 应用程序通常使用 WPD API 构建 WPD 命令,WPD API 将序列化该 WPD 命令并将其打包到 IOCTL 请求中,这将到达驱动程序,驱动程序将反序列化命令并相应地采取行动。

  当 WPD 驱动程序第一次尝试获取设备的 StorageInfo 时,该请求将通过 MTP 核心模块。该模块向设备发送 PTP/MTP 操作请求,并将结果 StorageInfo 数据集返回给驱动程序。

  因此,如果看一下 iPhone 是如何响应这个请求的,将能够根据上面提到的三个字段来确定 Storage 对象的行为。

  我们可以从上图得到以下信息:存储类型 == 固定 RAM,这是相当标准的移动设备。文件系统类型 == DCF, DCF 代表 Camera FS 的设计规则,你可以会从著名的 DCIM 根目录中认出它。DCF 标准定义了在目录和文件上设置只读属性的选项。访问能力 == 只读,不能删除对象,这是致命的。这将定义对 Storage 对象的访问限制,操作系统将遵守这些限制。例如,这将影响 iPhone 的上下文菜单中显示的选项。

  这就是为什么 iPhone 上的文件选项如此有限。为了便于比较,下图显示了使用 PTP 插入小米设备时的 StorageInfo 数据集。

  事实证明,这就是为什么即使使用 PTP 协议连接,也能够在小米设备上创建对象的原因。然而,值得注意的是小米的 MTP 响应器似乎有问题,无论在设备上选择 PTP 还是 MTP,在响应 GetStorageInfo 请求时都会返回相同的 Dataset,至少在红米 Note 8 模型上是这样。

  这样,我们就可以更清楚地理解 Apple 设备的运行方式,以及如何为设备配置 WPD 属性。

  接下来总结一下,当我们在主机上安装 iTunes 时会发生什么,以及它是如何实现诸如从设备复制文件之类的操作的。

  如上所述,由于 Storage 对象中的限制,WPD API 将仅在 iPhone 上提供有限的操作子集,然而,当安装 iTunes 后,它增加了一个不同的层,可以更全面地访问设备。

  正如我们在 AppleLowerFilter 中看到的,一旦 iTunes 被安装,它将允许设备选择一个不同的 USB 配置描述符。没有 iTunes,我们被限制在配置 1,另一方面,一旦 iTunes 被默认安装,选择的配置将是 3。以下是这两种配置及其接口:

  这两个驱动程序将成为被苹果公司称为 苹果移动设备 USB 设备 设备的一部分,该设备使用专有协议而不是 MTP 或 PTP 与 iPhone 进行通信,可以通过查看 libimobiledevice 的源代码来了解有关该协议的更多信息。一旦驱动程序安装并运行,iTunes 本身就会使用标准 WPD API 调用和定制的苹果特定命令的组合与 iPhone 进行通信。这使得 iTunes 能够提供从设备中复制文件、管理应用程序和备份以及更新设备固件等功能。

  下图提供了 iPhone 的整个设备堆栈的简化概述,包括安装 iTunes 和创建 AppleUsbMux 设备的场景:

  在本文中,我们探讨了苹果的 USB 低级过滤器是如何在 Windows 设备上工作的,以及它在提供不同体验方面的作用,还深入研究了 Windows 便携式设备 ( WPD ) 和用户模式驱动程序框架 ( UMDF ) 等主题,以更好地理解苹果设备堆栈的内部工作原理。

  我们谈到 WPD 设备是如何初始化和设置的,这帮助我们了解了为什么 WPD 设备协议属性和 Apple 设备中接口描述符定义的类之间存在不匹配。我们还研究了 WPD 设备的 Storage 对象是如何设置的,以及它如何在不使用第三方软件的情况下在 iPhone 上操作的限制中发挥作用。最后,我们简要讨论了安装 iTunes 对苹果移动设备栈的影响,以及 iTunes 如何妥善管理设备内容。

  苹果希望保护某些信息,限制与 iPhone 存储交互的现成选项,但如果有一个更混合的解决方案,用户可以在一定的限制下拥有更大的灵活性。虽然 iTunes 为管理 iPhone 内容提供了一个强大的解决方案,但有时安装第三方软件可能不是一个选择。然而,随着 iTunes 最近作为微软商店应用程序的发布,这种限制可能会减少。

新闻推荐

友情链接:

在线客服 : 服务热线:400-123-4567 电子邮箱: admin@wmeem.com

公司地址:广东省广州市天河区欧亚体育88号

欧亚体育有限公司,拥有占地面积57000平方米,建筑面积100000平方米的净水生产基地,是目前国内同行业中集产销研,服务一体的高新技术生产企业。广东...

Copyright © 2018-2023 欧亚体育·(中国)全站app 版权所有  xml地图  网站地图  备案号: