共用方式為


USB 裝置的 Windows 傳統型應用程式

在本文中,您將瞭解應用程式如何呼叫 WinUSB 函式 來與 USB 裝置通訊。 針對這類應用程式, WinUSB (Winusb.sys) 必須安裝為裝置的函式驅動程式。 裝置核心模式堆疊中的 WinUSB。 此驅動程式包含在 \Windows\System32\drivers 資料夾中的 Windows 中。

如果您使用 Winusb.sys 作為 USB 裝置的函式驅動程式,您可以從應用程式呼叫 WinUSB 函式 來與裝置通訊。 這些函式是由使用者模式 DLL 公開 Winusb.dll,可簡化通訊程式。 應用程式會呼叫對等的 WinUSB 函式,而不是建構裝置 I/O 控制要求來執行標準 USB 作業 (,例如設定裝置、傳送控制要求,以及從裝置) 傳送數據。

Winusb.dll 使用應用程式提供的數據來建構適當的裝置 I/O 控制要求,然後將要求傳送至 Winusb.sys 進行處理。 為了與 USB 堆棧通訊,WinUSB 函式會使用與應用程式要求相互關聯的適當 IOCTL 呼叫 DeviceIoControl 函式。 當要求完成時,WinUSB 函式會將 Winusb.sys (傳回的任何資訊,例如讀取要求中的數據) 傳回呼叫進程。 如果呼叫 DeviceIoControl 成功,它會傳回非零值。 如果呼叫失敗或擱置 (未立即處理 ) ,DeviceIoControl 會傳回零值。 如果發生錯誤,應用程式可以呼叫 GetLastError 以取得更詳細的錯誤訊息。

使用 WinUSB 函式與裝置通訊比實作驅動程式更簡單。 不過,請注意下列限制:

  • WinUSB 函式一次允許一個應用程式與裝置通訊。 如果您需要多個應用程式同時與裝置通訊,則必須實作函式驅動程式。

  • 在 Windows 8.1 之前,WinUSB 函式不支援將數據串流處理至非連續端點。

  • WinUSB 函式不支援已經支援核心模式的裝置。 這類裝置的範例包括分別由電話語音 API (TAPI) 和 NDIS 支援的數據機和網路適配器。

  • 對於多功能裝置,您可以使用裝置的 INF 檔案,個別指定每個 USB 函式的內建核心模式驅動程式或 Winusb.sys。 不過,您只能指定特定函式的其中一個選項,而不能同時指定兩者。

注意

WinUSB 函式需要 Windows XP 或更新版本。 您可以在 C/C++ 應用程式中使用這些函式來與您的 USB 裝置通訊。 若要撰寫使用 WinUSB API 的 UWP 應用程式,請參閱 USB 裝置的 UWP 應用程式

開始使用

  1. 取得為裝置撰寫 Windows 傳統型應用程式所需的工具

  2. 取得測試 USB 裝置及其硬體規格。

    • 使用規格來判斷應用程式的功能,以及相關的設計決策。

    • Microsoft USB 測試工具 (MUTT) 裝置可從 JJG 技術取得。 此裝置需要 Microsoft 的韌體,才能在 下載 MUTT 軟體套件取得。

  3. 撰寫基本架構應用程式,以取得裝置的句柄。

    撰寫第一個應用程式的方法有兩種:

  4. 為您的裝置安裝 Winusb.sys。

    如果使用 Visual Studio,請使用 Visual Studio 部署,在目標電腦上安裝驅動程式套件。 如需相關指示,請參閱 根據 WinUSB 範本撰寫 Windows 傳統型應用程式。 否則,請撰寫自定義 INF,在 裝置管理員 中手動安裝驅動程式。 如需詳細資訊,請參閱 WinUSB (Winusb.sys) 安裝

  5. 取得裝置的相關信息,並檢視其描述項。

    如需概念資訊,請參閱 所有USB開發人員的概念。 讀取組態描述元、每個支援的替代設定介面描述元及其端點描述元,以取得裝置功能的相關信息。 如需詳細資訊,請參閱 查詢裝置的USB描述元

  6. 傳送USB控件傳輸。

    將標準控制要求和廠商命令傳送至您的裝置。 如需詳細資訊,請參閱 將控制傳輸傳送至預設端點

  7. 傳送大量或中斷傳輸。

    對裝置支援的大量、中斷和連續端點執行讀取和寫入作業。 如需詳細資訊,請參閱 發出 I/O 要求

  8. 傳送無時序傳輸。

    傳送連續讀取和寫入要求,主要用於串流數據。 此功能僅適用於 Windows 8.1 和更新版本。 如需詳細資訊,請參閱 從 WinUSB 傳統型應用程式傳送 USB 的同步傳輸

另請參閱