使用 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之後,驅動程式可以呼叫 WdfUsbTargetDeviceGetDeviceDescriptor 和 WdfUsbTargetDeviceRetrieveConfigDescriptor 從裝置取得 USB 描述項。 這些描述項包含裝置第一個組態、其介面設定及其已定義端點的相關資訊。 (官方 USB 規格中定義了 USB 描述元。)
設定 USB 裝置
WdfUsbTargetDeviceCreateWithParameters方法也會為裝置第一個設定所包含的每個 USB 介面建立架構 USB 介面物件。
呼叫 WdfUsbTargetDeviceCreateWithParameters之後,用戶端驅動程式必須呼叫 WdfUsbTargetDeviceSelectConfig 來選取設定。 這個方法會針對所選取組態中介面的每個替代設定建立架構介面物件。
方法也會建立管道物件,代表所選組態之每個介面之每個替代設定中定義的端點。
選取組態之後,您可以視需要變更組態介面的 替代設定 。
您也可以呼叫 WdfUsbTargetDeviceSelectConfig 來取消設定裝置。
如需相關資訊,請參閱:
取得裝置資訊
設定裝置之後,您的用戶端驅動程式可以呼叫下列方法來取得 USB 裝置的相關資訊:
WdfUsbTargetDeviceQueryUsbCapability
判斷主機控制器和 USB 驅動程式堆疊是否支援特定功能。 在呼叫 WdfUsbTargetDeviceQueryUsbCapability之前,驅動程式必須呼叫 WdfUsbTargetDeviceCreateWithParameters。
WdfUsbTargetDeviceGetIoTarget
傳回與 USB 裝置相關聯之 I/O 目標物件的控制碼。 驅動程式可以將此控制碼傳遞至 WdfRequestSend 或 WdfIoTargetStop。
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 控制項傳輸。
重設和Power-Cycling裝置的埠
您的驅動程式可以呼叫下列方法來重設或電源迴圈裝置所連線的 USB 埠:
WdfUsbTargetDeviceResetPortSynchronously
同步傳送要求以重設裝置的 USB 埠。
WdfUsbTargetDeviceCyclePortSynchronously 只 (KMDF)
以同步方式將要求傳送至裝置的 USB 埠電源週期。
WdfUsbTargetDeviceFormatRequestForCyclePort (僅 KMDF)
格式化要求以開啟裝置 USB 埠的電源週期。 驅動程式必須呼叫 WdfRequestSend ,以同步或非同步方式傳送要求。
如需相關資訊,請參閱 如何從 USB 管道錯誤復原。
將 URB 傳送至裝置
如果您的 KMDF 驅動程式透過傳送包含 URL 的 I/O 要求來與其 USB 裝置通訊,驅動程式可以呼叫下列方法:
WdfUsbTargetDeviceCreateUrb (僅 KMDF)
配置 USB 要求區塊 (URB) 。 在呼叫 WdfUsbTargetDeviceCreateUrb之前,驅動程式必須呼叫 WdfUsbTargetDeviceCreateWithParameters。
WdfUsbTargetDeviceCreateIsochUrb (僅 KMDF)
(URB) 配置等時序 USB 要求區塊。 在呼叫 WdfUsbTargetDeviceCreateIsochUrb之前,驅動程式必須呼叫 WdfUsbTargetDeviceCreateWithParameters。
WdfUsbTargetDeviceSendUrbSynchronously 只 (KMDF)
同步傳送包含 URB 的 I/O 要求。
WdfUsbTargetDeviceFormatRequestForUrb (KMDF 僅)
格式化包含 URB 的 I/O 要求。 驅動程式必須呼叫 WdfRequestSend ,以同步或非同步方式傳送要求。
WdfUsbTargetDeviceWdmGetConfigurationHandle (僅 KMDF)
傳回裝置的 USBD 設定控制碼。 某些 URB 需要此控制碼。
如需 URL 的一般概念背景,請參閱 配置和建置 URL。