在 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 裝置物件。 UMDF 驅動程式必須先建立架構 USB 裝置物件,驅動程式才能存取架構對 USB I/O 目標的支援。 UMDF 提供 USB 裝置物件方法,讓 UMDF 驅動程式能夠:
建立 UMDF-USB 裝置物件
若要使用架構的 USB I/O 目標功能,UMDF 驅動程式必須先取得 IWDFUsbTargetFactory 介面的指標。 若要取得指標,驅動程式必須呼叫裝置IWDFDevice介面的QueryInterface方法。 下列程式碼範例示範如何呼叫 QueryInterface 以取得指標:
hr = pdevice->QueryInterface(IID_IWDFUsbTargetFactory, (LPVOID*)&ppUsbTargetFactory);
驅動程式必須接著呼叫 IWDFUsbTargetFactory::CreateUsbTargetDevice 方法來建立裝置的 USB I/O 目標物件。 驅動程式建立 USB I/O 目標之後,驅動程式可以將要求傳送至 I/O 目標。 一般而言,驅動程式會從IPnpCallbackHardware::OnPrepareHardware回呼函式內呼叫IWDFUsbTargetFactory::CreateUsbTargetDevice。
驅動程式呼叫 IWDFUsbTargetFactory::CreateUsbTargetDevice之後,驅動程式可以 取得 USB 裝置資訊 (例如,裝置的 USB 描述項、USB 介面和介面端點) 。 USB 規格會描述 USB 描述項。
取得 UMDF-USB 裝置資訊
在 UMDF 驅動程式呼叫 IWDFUsbTargetFactory::CreateUsbTargetDevice 方法來建立 UMDF-USB 目標裝置物件之後,驅動程式可以呼叫 USB 目標裝置物件所定義的下列方法來取得 USB 裝置的相關資訊:
IWDFUsbTargetDevice::RetrieveDescriptor
取得裝置的 USB 裝置描述元。
IWDFUsbTargetDevice::GetNumInterfaces
取得裝置支援的 USB 介面數目。
IWDFUsbTargetDevice::RetrieveUsbInterface
取得 IWDFUsbInterface 介面的指標,該介面會公開裝置支援的其中一個 USB 介面。
IWDFUsbTargetDevice::RetrieveDeviceInformation
擷取與 USB 裝置相關聯的功能資訊。
IWDFUsbTargetDevice::RetrievePowerPolicy
擷取 WinUsb 電源原則。
IWDFUsbTargetDevice::GetWinUsbHandle
取得與 I/O 目標裝置物件相關聯的 WinUsb 介面控制碼。
將控制傳輸傳送至 UMDF-USB 裝置物件
UMDF 驅動程式可以呼叫 IWDFUsbTargetDevice::FormatRequestForControlTransfer 方法來格式化描述標準、裝置類別特定或廠商特定 USB 控制傳輸的 I/O 要求。 驅動程式接著可以呼叫 IWDFIoRequest::Send 方法,以同步或非同步方式傳送要求。
設定 UMDF-USB 裝置的電源原則
UMDF 驅動程式可以呼叫 IWDFUsbTargetDevice::SetPowerPolicy 方法來設定 WinUsb 用於 USB 裝置的電源原則。 USB 裝置的電源原則會影響裝置電源管理狀態的變更。