アプリ マニフェストへの USB デバイス機能の追加方法

このトピックでは、Windows.Devices.Usb 名前空間を使用する Windows アプリに必要なデバイス機能について説明します。

  • USB デバイス機能を使用して Package.appxmanifest を更新する必要があります。
  • デバイス クラスは、サポートされているクラスのいずれかである必要があります。

USB デバイスの機能の使用

USB アプリは、デバイスに関する重要な情報を指定するために、そのアプリ パッケージ マニフェスト に特定のデバイス機能を含める必要があります。 階層的な順序で必要な要素を次に示します。

<DeviceCapability>: Name 属性は「usb」である必要があります。

<Device>: Id 属性は、ベンダー/製品 ID を指定する必要があります。関数の種類に一致する任意のデバイスへのアクセスを許可するには、「any」にすることができます。

<Function>: Type 属性は、デバイス クラスのコード、名前、またはデバイス インターフェイス GUID を指定できます。

Note

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 * *

    Note

    DeviceFirmwareUpdate クラスに属するデバイスには、その PC の OEM によって明示的に宣言された特権アプリのみがアクセスできます。

これらは未知のインターフェイスであるため、アプリはこれらのクラス コードのベンダー/製品 ID を指定する必要があります。

  • CDC (0x02)
  • CDC データ (0x0A)
  • その他 (0xEF)
  • アプリケーション固有 (0xFE)
  • ベンダー固有 (0xFF)

これらの USB デバイス クラスはサポートされていません。

  • 無効なクラス (0x00)
  • オーディオ クラス (0x01)
  • HID クラス (0x03)
  • イメージ クラス (0x06)
  • プリンター クラス (0x07)
  • マス ストレージ クラス (0x08)
  • スマート カード クラス (0x0B)
  • オーディオ/ビデオ クラス (0x10)
  • ワイヤレス コントローラー (ワイヤレス USB ホスト/ハブなど) (0xE0)

USB デバイスの機能の例

次の例では、アプリが任意のデバイス上の ActiveSync または StillImage インターフェイスにアクセスできるようにします。 これらは既知のクラス タイプであるため、アプリではベンダー ID と製品 ID を指定する必要はありません。

<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>