如何将 USB 设备功能添加到应用部件清单

本主题介绍使用 Windows.Devices.Usb 命名空间的 Windows 应用所需的设备功能。

  • 必须使用 USB 设备功能更新 Package.appxmanifest。
  • 设备类必须是受支持的类之一。

USB 设备功能使用情况

USB 应用必须在其 应用包清单 中包含某些设备功能,以指定有关设备的关键信息。 下面是按层次结构顺序排列的必需元素:

<DeviceCapability>Name 属性必须为“usb”。

<设备>Id 属性必须指定供应商/产品 ID,也可以是“any”,以允许访问与函数类型匹配的任何设备。

<函数>Type 属性可以指定设备类代码、名称或设备接口 GUID。

注意

无法在 Microsoft Visual Studio 2013中修改 USB 设备功能。 必须右键单击解决方案资源管理器中的 Package.appxmanifest 文件,选择“打开方式...”,然后选择“XML (文本) 编辑器”。 文件以纯 XML 打开。

<DeviceCapability Name="usb">
    <Device Id="vidpid:xxxx xxxx">
      <Function Type="classId:xx xx xx"/>
      <Function Type="name:xxxxx"/>
      <Function Type="winUsbId:xxxxx"/>
    </Device>
</DeviceCapability>

支持的 USB 设备类

支持的设备类的名称和代码值如下所示:

  • name:cdcControl, classId:02 * *

  • name:physical, classId:05 * *

  • name:personalHealthcare, classId:0f 00 00

  • name:activeSync, classId:ef 01 01

  • name:palmSync, classId:ef 01 02

  • name:deviceFirmwareUpdate, classId:fe 01 01

  • name:irda, classId:fe 02 00

  • name:measurement, classId:fe 03 *

  • name:vendorSpecific, classId:ff * *

    注意

    属于 DeviceFirmwareUpdate 类的设备只能由 OEM 为该电脑显式声明的特权应用访问。

由于这些接口未知,因此应用需要指定这些类代码的供应商/产品 ID。

  • CDC (0x02)
  • CDC-data (0x0A)
  • 其他 (0xEF)
  • 特定于应用程序的 (0xFE)
  • 供应商特定的 (0xFF)

不支持以下 USB 设备类:

  • 类 (0x00) 无效
  • 音频类 (0x01)
  • HID 类 (0x03)
  • 图像类 (0x06)
  • 打印机类 (0x07)
  • 大容量存储类 (0x08)
  • Smart 卡 类 (0x0B)
  • 音频/视频类 (0x10)
  • 无线控制器 (,例如无线 USB 主机/集线器) (0xE0)

USB 设备功能示例

以下示例允许应用访问任何设备上的任何 ActiveSyncStillImage 接口。 应用不需要指定供应商和产品标识符,因为这些是已知的类类型。

<DeviceCapability Name="usb">
  <Device Id="any">
    <Function Type="classId:ef 01 01"/>
    <Function Type="name:stillImage"/>
  </Device>
</DeviceCapability>

以下示例允许应用访问 OSR USB Fx2 设备上特定于供应商的接口。

<DeviceCapability Name="usb">
  <Device Id="vidpid:045e 930a">
    <Function Type="name:vendorSpecific"/>
  </Device>
</DeviceCapability>

以下示例允许应用访问不同版本的 OSR USB Fx2 设备上特定于供应商的接口。 请注意 classId 格式:“ff * *”。 类代码为“ff”,后跟通配符 (* *) ,以包含任何子类和协议代码。

<DeviceCapability Name="usb">
  <Device Id="vidpid:045e 930a">
    <Function Type="classId:ff * *"/>
  </Device>
</DeviceCapability>

以下示例允许应用使用 MS OS 描述符或设备 INF 中定义的设备接口 GUID 访问设备。

在这种情况下,设备 ID 值不能等于“any”。

<DeviceCapability Name="usb">
  <Device Id=" vidpid:1234 5678">
    <Function Type="winUsbId:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"/>
  </Device>
</DeviceCapability>

CustomUsbDeviceAccess 示例的应用清单包

  <Capabilities>
      <!--When the device's classId is FF * *, there is a predefined name for the class. 
          You can use the name instead of the class id. 
          There are also other predefined names that correspond to a classId.-->
      <m2:DeviceCapability Name="usb">
          <!--OSRFX2 Device-->
          <m2:Device Id="vidpid:0547 1002">
              <m2:Function Type="classId:ff * *"/>
              <!--<m2:Function Type="name:vendorSpecific"/>-->
          </m2:Device>
          <!--SuperMutt Device-->
          <m2:Device Id="vidpid:045E 0611">
              <!--<m2:Function Type="classId:ff * *"/>-->
              <m2:Function Type="name:vendorSpecific"/>
          </m2b:Device>
      </m2:DeviceCapability>
  </Capabilities>