次の方法で共有


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 構造体の内容を 0 に初期化します。 このパラメーターは省略可能であり、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 を呼び出して、 WdfUsbTargetDeviceFormatRequestForUrb を呼び出す前に URB 構造体を割り当てることができます。

通常、ドライバーは要求ハンドラー内から WdfUsbTargetDeviceCreateIsochUrb を呼び出します。

メモリ オブジェクトとそのバッファーは、親オブジェクトが削除されると削除されます。 ドライバーは、 WdfObjectDelete を呼び出すことによって、メモリ オブジェクトとそのバッファーを削除することもできます。

関連情報については、「 WdfUsbTargetDeviceCreateUrb」の「解説」セクションを参照してください。

次のコード例は、Isorwr サンプル ドライバーの PerformIsochTransfer ルーチンに基づいています。 この例では 、WdfUsbTargetDeviceCreateIsochUrb を呼び出して、等時性 USB 要求ブロックを割り当てます。 この例では、等時性転送要求を保持するために必要なバイト数を決定し、URB ヘッダーと URB 内の等時パケットを手動で構成します。 この時点で、 ドライバーは WdfUsbTargetDeviceCreateUrb の例に示すように、 WdfUsbTargetPipeFormatRequestForUrb を呼び出すことができます。


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
Header wdfusb.h (Wdfusb.h を含む)
Library Wdf01000.sys (「Framework ライブラリのバージョン管理」を参照)。
IRQL <=DISPATCH_LEVEL
DDI コンプライアンス規則 DriverCreate(kmdf)

こちらもご覧ください

WdfUsbTargetDeviceCreateUrb

WdfUsbTargetDeviceCreateWithParameters