共用方式為


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

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

InterfaceListEntry

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

[out] Urb

URB 結構的指標,該結構會接收由 USBD_SelectInterfaceUrbAllocateAndBuild 配置的URB。 當驅動程式完成使用時,用戶端驅動程式必須藉由呼叫 USBD_UrbFree 來釋放 URB。

傳回值

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

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

備註

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

用戶端驅動程式會 呼叫 USBD_SelectInterfaceUrbAllocateAndBuild ,以在選取的組態中配置和建置 SELECT 介面要求的 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,或針對其他替代設定使用另一個選取介面要求。 在某些情況下,重複使用現有的 URB 是慣用的方法,而不是配置新的 URB。 請考慮具有兩個替代設定之介面的 USB 音訊裝置,其已針對兩個頻寬需求定義。 設定 0 是針對零頻寬所定義;設定 1 會定義為使用特定數量的頻寬。 用戶端驅動程式想要根據裝置是否正在使用,經常在兩個設定之間切換。 若要實作此案例,用戶端驅動程式可以為選取介面要求配置兩個URL,每個設定一個。 當有音效要傳送至裝置時,用戶端驅動程式可以使用 (並重複使用) URB,以選取選取介面要求的 URB,以選取 [設定 1]。 若要在沒有音效時節省頻寬,用戶端驅動程式可以使用 (,並重複使用) 另一個 URB 切換至設定 0。 此實作可防止客戶端驅動程式為每個選取介面要求配置 URB,每次驅動程式需要變更設定時。

規格需求

需求
最低支援的用戶端 需要 Windows 8的 WDK。 以 Windows Vista 和更新版本的 Windows 作業系統為目標。
目標平台 桌面
標頭 usbdlib.h
程式庫 Usbdex.lib
IRQL DISPATCH_LEVEL

另請參閱

USBD_CreateHandle

USBD_SelectConfigUrbAllocateAndBuild