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 的呼叫端 USBDHandle 或 Urb。
言論
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。
您必須呼叫 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 |