共用方式為


WdfUsbTargetDeviceCreateIsochUrb 函式 (wdfusb.h)

[僅適用於 KMDF]

WdfUsbTargetDeviceCreateIsochUrb 方法會配置不連續的 USB 要求區塊 (URB)。

語法

NTSTATUS WdfUsbTargetDeviceCreateIsochUrb(
  [in]            WDFUSBDEVICE           UsbDevice,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES Attributes,
  [in]            ULONG                  NumberOfIsochPackets,
  [out]           WDFMEMORY              *UrbMemory,
  [out, optional] PURB                   *Urb
);

參數

[in] UsbDevice

從先前呼叫 WdfUsbTargetDeviceCreateWithParameters 取得之 USB 裝置物件的句柄。

[in, optional] Attributes

呼叫端提供的 WDF_OBJECT_ATTRIBUTES 結構的指標,其中包含新記憶體對象的屬性。 如果驅動程式提供此參數,結構的 ParentObject 成員必須是由架構建立的 USB 裝置物件 (WDFUSBDEVICE) 或要求物件 (WDFREQUEST),或是父系鏈結導致其中一種類型的任何物件。 這個參數是選擇性的,而且可以WDF_NO_OBJECT_ATTRIBUTES。

[in] NumberOfIsochPackets

指定系統在 URB 中設定記憶體的隨機封包數目。

[out] UrbMemory

接收架構記憶體物件句柄之 WDFMEMORY 型別位置的指標。

[out, optional] Urb

URB 結構的指標,可接收新不時點 URB 的位址。 架構會將 URB 結構的內容初始化為零。 這個參數是選擇性的,而且可以是 NULL。

傳回值

如果作業成功,WdfUsbTargetDeviceCreateIsochUrb 會傳回STATUS_SUCCESS。 否則,這個方法可以傳回下列其中一個值:

傳回碼 描述
STATUS_INVALID_PARAMETER
偵測到無效的參數。
STATUS_INVALID_DEVICE_STATE
驅動程式在呼叫 WDF_USB_DEVICE_CREATE_CONFIG_INIT時未指定用戶端合約版本。
STATUS_INSUFFICIENT_RESOURCES
記憶體不足。
 

此方法也可能 傳回其他NTSTATUS 值。

言論

在呼叫 WdfUsbTargetDeviceCreateIsochUrb之前,驅動程式必須呼叫 WdfUsbTargetDeviceCreateWithParameters。 如果成功,WdfUsbTargetDeviceCreateIsochUrb 會傳回架構記憶體物件的句柄,該物件描述新配置的異時位 URB。

驅動程式可以呼叫 WdfUsbTargetDeviceCreateIsochUrb 來配置 URB 結構,然後再呼叫 WdfUsbTargetDeviceFormatRequestForUrb

一般而言,驅動程式會從 要求處理程式內呼叫 WdfUsbTargetDeviceCreateIsochUrb

刪除父物件時,會刪除記憶體物件及其緩衝區。 驅動程式也可以呼叫 WdfObjectDelete來刪除記憶體物件及其緩衝區。

如需相關信息,請參閱 WdfUsbTargetDeviceCreateUrb的一節。

例子

下列程式代碼範例是以Isorwr範例驅動程式中的PerformIsochTransfer例程為基礎。 此範例會呼叫 WdfUsbTargetDeviceCreateIsochUrb 來配置非時空的 USB 要求區塊。 此範例會決定保存異時分傳送要求所需的位元組數目,然後手動設定 URB 標頭和 URB 中的異時分封包。 此時,驅動程式可以呼叫 WdfUsbTargetPipeFormatRequestForUrb,如 WdfUsbTargetDeviceCreateUrb所示。


USBD_PIPE_HANDLE usbdPipeHandle;
ULONG numPackets = UserBufferLength/TransferSizePerFrame;
ULONG urbSize;
PURB urb;  
WDFMEMORY memory;

WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);  
objectAttribs.ParentObject = UsbDevice;

status = WdfUsbTargetDeviceCreateIsochUrb(
                                     pDevContext->WdfUsbTargetDevice,  
                                     &objectAttribs,  
                                     0, 
                                     numPackets, 
                                     &memory,  
                                     NULL  
                                     ); 
 
urb = WdfMemoryGetBuffer(urbMemory, &urbSize); 
urbSize = GET_ISO_URB_SIZE(numPackets);  

usbdPipeHandle = WdfUsbTargetPipeWdmGetPipeHandle(pipe);
urb->UrbIsochronousTransfer.Hdr.Length = GET_ISO_URB_SIZE(numPackets);  
urb->UrbIsochronousTransfer.Hdr.Function = URB_FUNCTION_ISOCH_TRANSFER;  
urb->UrbIsochronousTransfer.PipeHandle = usbdPipeHandle; 

for (packetId = 0; packetId < numberOfPackets; packetId++) {

     Urb-> UrbIsochronousTransfer.IsoPacket[packetId].Offset = xxx;
     Urb-> UrbIsochronousTransfer.IsoPacket[packetId].YYY = yyy;
}


要求

要求 價值
最低支援的用戶端 Windows Vista
目標平臺 普遍
最低 KMDF 版本 1.11
標頭 wdfusb.h (包括 Wdfusb.h)
連結庫 Wdf01000.sys (請參閱架構連結庫版本控制。)
IRQL <=DISPATCH_LEVEL
DDI 合規性規則 DriverCreate(kmdf)

另請參閱

WdfUsbTargetDeviceCreateUrb

WdfUsbTargetDeviceCreateWithParameters