共用方式為


USBD_SelectInterfaceUrbAllocateAndBuild函式 (usbdlib.h)

USBD_SelectInterfaceUrbAllocateAndBuild 例程會配置和格式化要求選取介面或變更其替代設定所需的 URB 結構。

語法

NTSTATUS USBD_SelectInterfaceUrbAllocateAndBuild(
  [in]  USBD_HANDLE                USBDHandle,
  [in]  USBD_CONFIGURATION_HANDLE  ConfigurationHandle,
        PUSBD_INTERFACE_LIST_ENTRY InterfaceListEntry,
  [out] PURB                       *Urb
);

參數

[in] USBDHandle

用戶端驅動程式在先前呼叫 USBD_CreateHandle 例程時擷取的 USBD 句柄。

[in] ConfigurationHandle

在驅動程式堆疊完成選取組態要求之後,UrbSelectConfiguration.ConfigurationHandle 中由 USB 驅動程式堆棧傳回的句柄URB 結構的成員。

InterfaceListEntry

呼叫端配置 USBD_INTERFACE_LIST_ENTRY 結構的指標。 如需詳細資訊,請參閱。

[out] Urb

URB 結構的指標,該結構會接收由 USBD_SelectInterfaceUrbAllocateAndBuild所配置的 URB。 用戶端驅動程序必須藉由呼叫 USBD_UrbFree來釋出 URB。

傳回值

例程會傳回NTSTATUS程式代碼。 可能的值包括但不限於下表所列的狀態代碼。

傳回碼 描述
STATUS_SUCCESS
例程呼叫成功。
STATUS_INVALID_PARAMETER
呼叫端在任何參數中傳遞NULL。
STATUS_INSUFFICIENT_RESOURCES
記憶體不足,無法完成呼叫。

言論

在選取裝置中的設定之後,用戶端驅動程序必須呼叫 USBD_SelectInterfaceUrbAllocateAndBuild 例程。 選取組態要求完成之後,用戶端驅動程式會在URB UrbSelectConfiguration.ConfigurationHandle 成員中收到組態句柄。 該句柄必須在 USBD_SelectInterfaceUrbAllocateAndBuildConfigurationHandle 參數中指定。

用戶端驅動程式會呼叫 USBD_SelectInterfaceUrbAllocateAndBuild,以在選取的組態中配置和建置 URB,以變更介面的替代設定。 在呼叫 USBD_SelectInterfaceUrbAllocateAndBuild時,用戶端驅動程式必須配置並提供 USBD_INTERFACE_LIST_ENTRY 結構的指標。 用戶端驅動程序必須設定結構成員,如下所示:

  • InterfaceDescriptor 成員必須指向 USB_INTERFACE_DESCRIPTOR 結構,其中包含具有要選取之替代設定的介面描述元。 在先前的要求中取得介面描述元,以取得組態描述元和相關聯的介面和端點描述元。
  • 介面 成員必須是 NULL。
USBD_SelectInterfaceUrbAllocateAndBuild 配置 URB 結構,並填入指定介面設定和端點的相關信息。 例程也會配置 USBD_INTERFACE_INFORMATION 結構。 結構成員(管道資訊除外)會根據指定的介面描述元填入。 USBD_SelectInterfaceUrbAllocateAndBuild 會將 USBD_INTERFACE_LIST_ENTRYInterface 成員設定為 URB 中 USBD_INTERFACE_INFORMATION 位址。 用戶端驅動程式可以將此 URB 傳送至 USB 驅動程式堆疊,以選取介面中的替代設定。

用戶端驅動程式無法在單一選取介面要求中變更多個介面中的替代設定。 每個要求只會以一個介面為目標。

選取介面要求完成之後,USB 驅動程式堆疊會填入 USBD_INTERFACE_INFORMATION,其中包含針對所選替代設定中定義的端點開啟管道的相關信息。 用戶端驅動程式可以檢查 Pipes 所指向的數位, 以取得這些管道控點,USBD_INTERFACE_INFORMATION的成員,並儲存句柄以取得未來的數據傳輸要求。

用戶端驅動程式可以重複使用由 USBD_SelectInterfaceUrbAllocateAndBuild 只針對相同替代設定之另一個選取介面要求 所配置的 URB。 用戶端驅動程式 不得 針對任何其他類型的要求重複使用 URB,或針對其他替代設定使用另一個 select-interface 要求。 在某些情況下,重複使用現有的 URB 是慣用的方法,而不是配置新的 URB。 請考慮具有兩個替代設定介面的USB音訊裝置,其定義用於兩個頻寬需求。 設定 0 是針對零頻寬所定義;設定 1 是定義為使用特定數量的頻寬。 用戶端驅動程式想要根據裝置是否正在使用,經常在兩個設定之間切換。 若要實作此案例,用戶端驅動程式可以針對選取介面要求配置兩個URB,每個設定一個。 當有聲音傳送到裝置時,用戶端驅動程式可以使用 [並重複使用] URB 來要求選取 [設定 1]。 若要在沒有任何音效時節省頻寬,用戶端驅動程式可以使用 (並重複使用) 其他 URB 切換至設定 0。 此實作可防止客戶端驅動程式為每個選取介面要求配置 URI,每次驅動程式需要變更設定時。

要求

要求 價值
最低支援的用戶端 需要適用於 Windows 8 的 WDK。 以 Windows Vista 和更新版本的 Windows作系統為目標。
目標平臺 桌面
標頭 usbdlib.h
連結庫 Usbdex.lib
IRQL DISPATCH_LEVEL

另請參閱

USBD_CreateHandle

USBD_SelectConfigUrbAllocateAndBuild