共用方式為


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

摘要:

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

重要 API:

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

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

此內容中的自定義裝置表示 Microsoft 不提供內建類別驅動程式的裝置。 相反地,您可以將 WinUSB (Winusb.sys 安裝為設備驅動器) 。

選擇程式設計模型

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

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

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

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

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

    如果您的 app 在裝置的不時序端點傳輸資料,您必須撰寫 Windows 傳統型應用程式。 在 Windows 8.1 中,新的 WinUSB Functions 已新增至 API 集合,可讓傳統型應用程式傳送數據,以及從不時點接收數據。

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

    UWP 應用程式是每個使用者的應用程式,而且無法在每個應用程式的範圍之外進行變更。 針對這些類型的應用程式,您必須撰寫 Windows 傳統型應用程式。

  • UWP app 是否支援 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 app Windows 傳統型應用程式
函式驅動程式 Microsoft 提供的 Winusb.sys( 內核模式驅動程式) 。 Microsoft 提供的 Winusb.sys( 內核模式驅動程式) 。
篩選驅動程式 如果篩選驅動程式存在,存取權僅限於具特殊許可權的應用程式。 應用程式會在 OEM 的裝置元資料中宣告為特殊許可權應用程式。 只要篩選驅動程式不會封鎖 存取Winusb.sys,篩選驅動程式就可以出現在核心模式裝置堆疊中。

程式碼範例

樣本 UWP app Windows 傳統型應用程式
開始使用這些範例

開發工具

開發工具 UWP app Windows 傳統型應用程式
開發人員環境 Microsoft Visual Studio 2013

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

若為連續傳輸,Visual Studio 2013 搭配 Windows 驅動程式套件 (WDK) 8.1 或更新版本。
程式語言 C#、VB.NET、C++、JavaScript C/C++

功能實作

主要案例 UWP app 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 app Windows 傳統型應用程式
程式設計手冊 與 USB 裝置交談,開始完成 如何使用 WinUSB 函式存取 USB 裝置
API 參考資料 Windows.Devices.Usb WinUSB 函式