다음을 통해 공유


USB 디바이스용 Windows 애플리케이션 개발 개요

요약:

  • 올바른 프로그래밍 모델을 선택하기 위한 지침
  • UWP 앱 및 데스크톱 앱 개발자 환경

중요 API:

이 문서에서는 USB 디바이스와 통신하기 위해 UWP 앱 또는 Windows 데스크톱 앱을 작성해야 하는지 여부를 결정하기 위한 지침을 제공합니다.

Windows는 사용자 지정 USB 디바이스와 통신하는 앱을 작성하는 데 사용할 수 있는 API 집합을 제공합니다. API는 디바이스 찾기, 데이터 전송과 같은 일반적인 USB 관련 작업을 수행합니다.

이 컨텍스트의 사용자 지정 디바이스는 Microsoft가 기본 제공 클래스 드라이버를 제공하지 않는 디바이스를 의미합니다. 대신 WinUSB(Winusb.sys)를 디바이스 드라이버로 설치할 수 있습니다.

프로그래밍 모델 선택

Winusb.sys를 설치하는 경우 프로그래밍 모델 옵션은 다음과 같습니다.

최상의 프로그래밍 모델을 선택하는 전략은 다양한 요인에 따라 달라집니다.

  • 앱이 내부 USB 디바이스와 통신합니까?

    API는 주로 주변 장치 액세스를 위해 설계되었습니다. 또한 API는 PC 내부 USB 디바이스에 액세스할 수 있습니다. 그러나 UWP 앱에서 PC 내부 USB 디바이스에 대한 액세스는 해당 PC에 대한 OEM에 의해 디바이스 메타데이터에 명시적으로 선언된 권한 있는 앱으로 제한됩니다.

  • 앱이 USB 등시 엔드포인트와 통신하나요?

    앱이 디바이스의 등시 엔드포인트 간 데이터를 전송하는 경우 Windows 데스크톱 앱을 작성해야 합니다. Windows 8.1 데스크톱 앱이 동시 엔드포인트로 데이터를 보내고 받을 수 있도록 하는 새 WinUSB 함수가 API 집합에 추가되었습니다.

  • 앱이 앱의 "제어판" 유형인가요?

    UWP 앱은 사용자별 앱이며 각 앱의 scope 외부에서 변경할 수 없습니다. 이러한 유형의 앱의 경우 Windows 데스크톱 앱을 작성해야 합니다.

  • UWP 앱에서 USB 디바이스 클래스가 지원되는 클래스인가요?

    디바이스가 이러한 디바이스 클래스 중 하나에 속하는 경우 UWP 앱을 작성합니다.

    • 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 클래스에 속하는 경우 앱은 권한 있는 앱이어야 합니다.

디바이스가 이전 디바이스 클래스에 속하지 않는 경우 Windows 데스크톱 앱을 작성합니다.

드라이버 요구 사항

드라이버 요구 사항 UWP 앱 Windows 데스크톱 앱
함수 드라이버 Microsoft에서 제공하는 Winusb.sys (커널 모드 드라이버). Microsoft에서 제공하는 Winusb.sys (커널 모드 드라이버).
필터 드라이버 필터 드라이버가 있는 경우 권한 있는 앱으로 액세스가 제한됩니다. 앱은 OEM에 의해 디바이스 메타데이터에서 권한 있는 앱으로 선언됩니다. 필터 드라이버는 Winusb.sys대한 액세스를 차단하지 않는 한 커널 모드 디바이스 스택에 있을 수 있습니다.

코드 샘플

샘플 UWP 앱 Windows 데스크톱 앱
이러한 샘플 시작

개발 도구

개발 도구 UWP 앱 Windows 데스크톱 앱
개발자 환경 Microsoft Visual Studio 2013

Windows 8.1 위한 Microsoft Windows SDK(소프트웨어 개발 키트)
Visual Studio(Ultimate 또는 Professional) 및 WDK(Windows 드라이버 키트) 8 이상에 포함된 WinUSB 애플리케이션 템플릿을 사용합니다.

등시 전송의 경우 WDK(Windows 드라이버 키트) 8.1 이상을 사용하여 Visual Studio 2013.
프로그래밍 언어 C#, VB.NET, C++, JavaScript C/C++

기능 구현

주요 시나리오 UWP 앱 Windows 데스크톱 앱
디바이스 검색 Windows.Devices.Enumeration 네임스페이스를 사용하여 UsbDevice를 가져옵니다. SetupAPIWinUsb_Initialize 사용하여 WINUSB_INTERFACE_HANDLE 가져옵니다.
USB 제어 전송 UsbSetupPacket
UsbControlRequestType
UsbDevice.SendControlInTransferAsync
UsbDevice.SendControlOutTransferAsync
WINUSB_SETUP_PACKET
WinUsb_ControlTransfer
USB 설명자 가져오기 UsbDevice.DeviceDescriptor
UsbConfiguration.Descriptors
UsbInterface.Descriptors
UsbEndpointDescriptor
WinUsb_GetDescriptor
USB 대량 전송 보내기 UsbBulkInPipe
UsbBulkOutPipe
WinUsb_ReadPipe
WinUsb_WritePipe
USB 인터럽트 전송 보내기 UsbInterruptInPipe
UsbInterruptOutPipe
WinUsb_ReadPipe
WinUsb_WritePipe
USB 등시 전송 보내기 지원되지 않습니다. WinUsb_ReadIsochPipe
WinUsb_ReadIsochPipeAsap
WinUsb_WriteIsochPipe
WinUsb_WriteIsochPipeAsap
디바이스 닫기 UsbDevice.Close WinUsb_Free

설명서

설명서 UWP 앱 Windows 데스크톱 앱
프로그래밍 가이드 USB 장치와 대화하고 완료하기 시작 WinUSB 함수를 사용하여 USB 디바이스에 액세스하는 방법
API 참조 Windows.Devices.Usb WinUSB 함수