本主題描述從第 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 控件傳輸。
重設並重新啟動裝置的埠
您的驅動程式可以呼叫下列方法來重設或重新開啟裝置所連接的 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。