共用方式為


USBD_UrbAllocate函式 (usbdlib.h)

USBD_UrbAllocate 例程會配置 USB 要求區塊 (URB)。

語法

NTSTATUS USBD_UrbAllocate(
  [in]  USBD_HANDLE USBDHandle,
  [out] PURB        *Urb
);

參數

[in] USBDHandle

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

[out] Urb

新配置 URB 結構的指標。 結構的所有成員都會設定為零。 用戶端驅動程序必須藉由呼叫 USBD_UrbFree來釋出 URB。

傳回值

如果要求成功,USBD_UrbAllocate 例程會傳回STATUS_SUCCESS。 否則,USBD_UrbAllocate 會將 Urb 設定為 NULL,並傳回失敗碼。

可能的值包括但不限於 STATUS_INVALID_PARAMETER,這表示傳入 NULL 的呼叫端 USBDHandleUrb

言論

USBD_UrbAllocate 例程可讓基礎 USB 驅動程式堆疊為 URB 配置不透明的 URB 內容。 透過使用 URB 內容,USB 驅動程式堆疊可以更有效率且可靠地處理要求。 這些優化是由 Windows 8 中包含的 USB 3.0 驅動程式堆疊所提供。 用戶端驅動程式無法存取 URB 內容;總線驅動程式會在內部使用內容。

不論主機控制器的 USB 通訊協定版本為何,基礎 USB 驅動程式堆疊,目標作系統,用戶端驅動程式都必須呼叫 USBD_UrbAllocate 來配置 URB 結構。 USBD_UrbAllocate 取代先前的配置機制,例如 ExAllocatePoolWithTag,或在堆棧上配置它們。

用戶端驅動程式必須 使用 USBD_UrbAllocate

  • 若要配置具有可變長度的 URB,例如用於不時移轉的 URB。 相反地,用戶端驅動程式必須呼叫 USBD_IsochUrbAllocate
  • 如果目標作系統是具有 Service Pack 2 (SP2) 或舊版 Windows 的 Windows XP。
如需取代例程的詳細資訊,請參閱 配置和建置 URL

您必須呼叫 USBD_UrbFree,才能釋放 USBD_UrbAllocate所配置的 URB。

例子

下列程式代碼範例示範如何配置、提交及發行 URB。 此範例會同步提交 URB。 如需 SubmitUrbSync 函式的實作,請參閱 如何提交 URB中的範例一節。

NTSTATUS CreateandSubmitURBSynchronously (
    _In_ USBD_HANDLE USBDHandle 
{
    PURB    Urb = NULL;

    NTSTATUS status;

    status = USBD_UrbAllocate(USBDHandle, &Urb);

    if (!NT_SUCCESS(status))
    {
        goto CreateandSubmitURBExit;
    }

    //Format the URB for the request. Not Shown.
    status = BuildURBForBulkTransfer (Urb);

    if (!NT_SUCCESS(status))
    {
        goto CreateandSubmitURBExit;
    }

    status = SubmitUrbSync( TargetDeviceObject,
        Urb)  

    if (!NT_SUCCESS(status))
    {
        goto CreateandSubmitURBExit;
    }

CreateandSubmitURBExit:

    if (Urb)
    {
        USBD_UrbFree( USBDHandle, Urb); 
    }

    return status;

}

要求

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

另請參閱

配置和建置 URL

將要求傳送至USB裝置

USBD_UrbFree