共用方式為


在 UMDF 1.x 驅動程式中使用 USB 管道

警告

UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的 UMDF 驅動程式都應該使用 UMDF 2 來撰寫。 未將新功能新增至 UMDF 1,而且較新版本的 Windows 10 上不支援 UMDF 1。 通用 Windows 驅動程式必須使用 UMDF 2。

封存的 UMDF 1 範例可在Windows 11 22H2 版 - 2022 年 5 月驅動程式範例更新中找到。

如需詳細資訊,請參閱使用 UMDF 消費者入門

架構代表 USB 介面中的每個管道,做為架構 USB 管道物件。 當驅動程式設定 USB 裝置時,架構會為每個選取介面中的每個管道建立架構 USB 管道物件。 管道物件方法可讓驅動程式:

取得 UMDF-USB 管道資訊

UMDF 驅動程式呼叫 IWDFUsbInterface::RetrieveUsbPipeObject 方法以取得 USB 管道物件的 IWDFUsbTargetPipe 介面指標之後,驅動程式可以呼叫 USB 管道物件定義的下列方法,以取得 USB 管道的相關資訊:

IWDFUsbTargetPipe::GetInformation
擷取 USB 管道及其端點的相關資訊。

IWDFUsbTargetPipe::GetType
傳回 USB 管道的類型。

IWDFUsbTargetPipe::IsInEndPoint
判斷 USB 管道是否連接到輸入端點。

IWDFUsbTargetPipe::IsOutEndPoint
判斷 USB 管道是否連接到輸出端點。

IWDFUsbTargetPipe::RetrievePipePolicy
擷取 WinUsb 管道原則。

從 UMDF-USB 管道讀取

若要從 USB 輸入管道讀取資料,您的驅動程式可以使用下列技術 (或兩者) :

寫入 UMDF-USB 管道

若要將資料寫入 USB 輸出管道,UMDF 驅動程式可以先呼叫 IWDFIoTarget::FormatRequestForWrite 方法來建置寫入要求。 然後,驅動程式可以呼叫 IWDFIoRequest::Send 方法,以非同步方式傳送要求。

停止、排清和重設 UMDF-USB 管道

UMDF 驅動程式可以呼叫下列方法來停止、排清或重設 USB 管道:

IWDFUsbTargetPipe::Abort
同步傳送要求,以停止 USB 管道上所有擱置中的傳輸。

IWDFUsbTargetPipe::Flush
同步傳送要求,以捨棄 WinUsb 在裝置傳回比用戶端要求更多的資料時所儲存的任何資料。

IWDFUsbTargetPipe::Reset
同步傳送要求以重設 USB 管道。

設定 UMDF-USB 管道的原則

UMDF 驅動程式可以呼叫 IWDFUsbTargetPipe::SetPipePolicy 方法來控制 WinUsb 用於 USB 管道的行為 (,例如逾時、處理簡短封包,以及其他行為) 。

處理管道錯誤

如果驅動程式的 USB 目標 完成 I/O 要求並出現錯誤狀態值,您的驅動程式應該執行下列動作:

  1. 使用WdfIoTargetCancelSentIo旗標集呼叫IWDFIoTargetStateManagement::Stop。 如果目標尚未完成要求,此呼叫會停止管道,並取消驅動程式已傳送至 USB 目標的任何其他 I/O 要求。

  2. 呼叫 IWDFUsbTargetPipe::Abort 以將中止要求傳送至管道。

  3. 呼叫 IWDFUsbTargetPipe::Reset 將重設要求傳送至管道。

  4. 呼叫 IWDFIoTargetStateManagement::Start 以重新開機管道。

  5. 重新傳送失敗的 I/O 要求,以及遵循失敗要求的所有 I/O 要求。