다음을 통해 공유


앱 매니페스트에 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 클래스에 속하는 디바이스는 해당 PC에 대해 OEM에서 명시적으로 선언한 권한 있는 앱에서만 액세스할 수 있습니다.

이러한 인터페이스는 알 수 없는 인터페이스이므로 이러한 클래스 코드에 대한 공급업체/제품 ID를 지정하려면 앱이 필요합니다.

  • CDC(0x02)
  • CDC-data(0x0A)
  • 기타(0xEF)
  • 애플리케이션별(0xFE)
  • 공급업체별(0xFF)

이러한 USB 디바이스 클래스는 지원되지 않습니다.

  • 잘못된 클래스(0x00)
  • 오디오 클래스(0x01)
  • HID 클래스(0x03)
  • 이미지 클래스(0x06)
  • 프린터 클래스(0x07)
  • 대용량 스토리지 클래스(0x08)
  • 스마트 카드 클래스(0x0B)
  • 오디오/비디오 클래스(0x10)
  • 무선 컨트롤러(예: 무선 USB 호스트/허브)(0xE0)

USB 디바이스 기능 예제

다음 예제에서는 앱이 모든 디바이스의 ActiveSync 또는 StillImage 인터페이스에 액세스할 수 있도록 허용합니다. 알려진 클래스 유형이므로 앱에서 공급업체 및 제품 식별자를 지정할 필요가 없습니다.

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