共用方式為


操作USB裝置

本主題描述從第 2 版開始的 Kernel-Mode Driver Framework (KMDF) 或 User-Mode Driver Framework (UMDF) 驅動程式可以使用 Windows Driver Framework (WDF) 所提供的 USB 裝置物件方法來執行的作業。

其中包含下列各節:

如需撰寫簡單 KMDF 型 USB 用戶端驅動程式的逐步指示,請參閱如何撰寫您的第一個 USB 用戶端驅動程式(KMDF)。

建立USB裝置物件

若要使用架構的 USB I/O 目標物件(WDFUSBDEVICE、WDFUSBINTERFACE 和 WDFUSBPIPE),您的用戶端驅動程式必須先呼叫 WdfUsbTargetDeviceCreateWithParameters 來建立 USB 裝置物件。 一般而言,驅動程式會從其 EvtDevicePrepareHardware 回呼函式呼叫 WdfUsbTargetDeviceCreateWithParameters

當驅動程式呼叫 WdfUsbTargetDeviceCreateWithParameters 時,架構會建立 WDFUSBDEVICE 物件,並將它與代表 USB 裝置的 FDO 產生關聯。 方法會傳回新架構 USB 裝置物件的句柄,USB 用戶端驅動程式接著可以使用該物件與實體裝置通訊。

呼叫 WdfUsbTargetDeviceCreateWithParameters 之後,驅動程式可以呼叫 WdfUsbTargetDeviceGetDeviceDescriptorWdfUsbTargetDeviceRetrieveConfigDescriptor ,以從裝置取得 USB 描述元。 這些描述項包含裝置第一個設定、其介面設定及其定義端點的相關信息。 (USB 描述項定義於官方USB規格中。

設定USB裝置

WdfUsbTargetDeviceCreateWithParameters 方法也會為裝置第一個設定所包含的每個 USB 介面建立架構 USB 介面物件。

呼叫 WdfUsbTargetDeviceCreateWithParameters 之後,用戶端驅動程序必須呼叫 WdfUsbTargetDeviceSelectConfig 以選取組態。 這個方法會為所選組態中介面的每個替代設定建立架構介面物件。

方法也會建立管線物件,代表所選組態之每個介面之每個替代設定中所定義的端點。

選取組態之後,您可以視需要變更組態介面的 替代設定

您也可以呼叫 WdfUsbTargetDeviceSelectConfig 來取消設定裝置。

如需相關資訊,請參閱:

取得裝置資訊

設定裝置之後,您的用戶端驅動程式可以呼叫下列方法來取得 USB 裝置的相關信息:

WdfUsbTargetDeviceQueryUsbCapability
判斷主機控制器和 USB 驅動程式堆疊是否支援特定功能。 在呼叫 WdfUsbTargetDeviceQueryUsbCapability 之前,驅動程式必須呼叫 WdfUsbTargetDeviceCreateWithParameters

WdfUsbTargetDeviceGetIoTarget
返回與 USB 裝置相關聯的 I/O 目標物件的控制代碼。 驅動程式可以將此句柄傳遞至 WdfRequestSendWdfIoTargetStop

WdfUsbTargetDeviceRetrieveInformation
擷取與 USB 裝置相關聯的版本和功能資訊。

WdfUsbTargetDeviceIsConnectedSynchronous (僅限 KMDF)
判斷裝置是否已連線。

WdfUsbTargetDeviceRetrieveCurrentFrameNumber(僅 KMDF)
擷取目前的USB幀號碼。

取得USB描述符

若要取得 USB 裝置描述元中包含的 Unicode 字串串,驅動程式可以呼叫下列任一方法:

WdfUsbTargetDeviceGetDeviceDescriptor
取得裝置的 USB 裝置描述元

WdfUsbTargetDeviceRetrieveConfigDescriptor
取得裝置的 USB 組態描述元、介面描述元和端點描述元。

WdfUsbTargetDeviceQueryString
將 Unicode 字串複製到驅動程式提供的緩衝區。

WdfUsbTargetDeviceAllocAndQueryString
將 Unicode 字串複製到架構提供的緩衝區。

WdfUsbTargetDeviceFormatRequestForString
格式化 Unicode 字串的請求。 驅動程式可以呼叫 WdfRequestSend ,以同步或異步方式傳送要求。

傳送控件傳輸

您的驅動程式可以呼叫下列方法來傳送 I/O 要求,以描述標準、裝置類別特定或廠商特定的 USB 控制傳輸。

WdfUsbTargetDeviceSendControlTransferSynchronously
同步傳送 USB 控制件傳輸要求。

WdfUsbTargetDeviceFormatRequestForControlTransfer
格式化 USB 控制傳輸的請求。 驅動程式可以呼叫 WdfRequestSend ,以同步或異步方式傳送要求。

如需相關信息,請參閱 如何傳送 USB 控件傳輸

重設並重新啟動裝置的埠

您的驅動程式可以呼叫下列方法來重設或重新開啟裝置所連接的 USB 連接埠:

WdfUsbTargetDeviceResetPortSynchronously
同步傳送要求重設裝置的 USB 埠。

WdfUsbTargetDeviceCyclePortSynchronously (僅限 KMDF)
同步發送請求以重啟裝置的USB埠電源。

WdfUsbTargetDeviceFormatRequestForCyclePort (僅限 KMDF)
將請求編寫為重啟裝置的 USB 埠。 驅動程式必須呼叫 WdfRequestSend ,以同步或異步方式傳送要求。

如需相關信息,請參閱 如何從USB管道錯誤復原

將 URB 傳送至裝置

如果您的 KMDF 驅動程式透過傳送包含 URB 的 I/O 要求來與其 USB 裝置通訊,驅動程式可以呼叫下列方法:

WdfUsbTargetDeviceCreateUrb (僅限 KMDF)
分配 USB 請求區塊 (URB)。 在呼叫 WdfUsbTargetDeviceCreateUrb 之前,驅動程式必須呼叫 WdfUsbTargetDeviceCreateWithParameters

WdfUsbTargetDeviceCreateIsochUrb (僅限 KMDF)
分配同步傳輸的USB請求區塊(URB)。 在呼叫 WdfUsbTargetDeviceCreateIsochUrb 之前,驅動程式必須呼叫 WdfUsbTargetDeviceCreateWithParameters

WdfUsbTargetDeviceSendUrbSynchronously (僅限 KMDF)
同步傳送包含 URB 的 I/O 要求。

WdfUsbTargetDeviceFormatRequestForUrb (僅適用於 KMDF)
格式化包含 URB 的 I/O 請求包。 驅動程式必須呼叫 WdfRequestSend ,以同步或異步方式傳送要求。

WdfUsbTargetDeviceWdmGetConfigurationHandle (僅限 KMDF)
傳回裝置的 USBD 組態控制代碼。 某些 URB 需要此控制代碼。

如需URL的一般概念背景,請參閱 配置和建置URL