共用方式為


開發適用於 USB 裝置的 Windows 應用程式概觀

總結:

  • 選擇正確程序設計模型的指導方針
  • UWP 應用程式和桌面應用程式開發人員體驗

重要 API:

本文提供指導方針,讓您決定是否應該撰寫 UWP 應用程式或 Windows 傳統型應用程式來與 USB 裝置通訊。

Windows 提供 API 集合,可讓您用來撰寫與自定義 USB 裝置通訊的應用程式。 API 會執行常見的 USB 相關工作,例如尋找裝置、數據傳輸。

在此情境中,自行設計的裝置是指 Microsoft 沒有提供內建類別驅動程式的裝置。 相反地,您可以將 WinUSB (Winusb.sys) 安裝為設備驅動器。

選擇程式設計模型

如果您安裝 Winusb.sys,以下是程式設計模型選項:

選擇最佳程序設計模型的策略取決於各種因素。

  • 您的應用程式是否會與內部USB裝置通訊?

    API 主要是針對存取周邊裝置而設計。 API 也可以存取計算機內部 USB 裝置。 不過,從 UWP 應用程式存取電腦內部 USB 裝置僅限於由該電腦 OEM 明確宣告在裝置元數據中的特殊許可權應用程式。

  • 您的應用程式是否會與 USB 同步端點通訊?

    如果您的應用程式將資料傳輸至或從裝置的同步端點,您必須撰寫 Windows 桌面應用程式。 在 Windows 8.1 中,新的 WinUSB Functions 已新增至 API 集合,可讓桌面應用程式傳送數據,並從等時性端點接收數據。

  • 您的應用程式是否為「控制面板」類型的應用程式?

    UWP 應用程式是每個使用者的應用程式,而且無法在每個應用程式的範圍之外進行變更。 針對這些類型的應用程式,您必須撰寫 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 桌面應用程式
從這些範例開始
  • 使用 Microsoft Visual Studio (Ultimate 或 Professional) 隨附的 WinUsb 應用程式 範本開始。
  • 使用 如何使用 WinUSB Functions存取 USB 裝置中所述的程式碼範例來擴充範本。

開發工具

開發工具 UWP 應用程式 Windows 桌面應用程式
開發人員環境 Microsoft Visual Studio 2013

Microsoft適用於 Windows 8.1 的 Windows 軟體開發工具包 (SDK)
使用 Visual Studio (Ultimate 或 Professional) 和 Windows Driver Kit (WDK) 8 或更新版本隨附的 WinUSB 應用程式 範本。

針對等時傳輸,使用 Visual Studio 2013 與 Windows Driver Kit(WDK)8.1 或更新版本。
程式設計語言 C#、VB.NET、C++、JavaScript C/C++

功能開發

關鍵情境 UWP 應用程式 Windows 桌面應用程式
設備偵測 使用 Windows.Devices.Enumeration 命名空間來取得 UsbDevice 使用 SetupAPIWinUsb_Initialize 來取得WINUSB_INTERFACE_HANDLE。
USB 控制傳輸 UsbSetupPacket
Usb控制請求類型
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 Functions 存取 USB 裝置
API 參考資料 Windows.Devices.Usb WinUSB 功能