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を返します。 それ以外の場合、このメソッドは次のいずれかの値を返すことができます。
リターン コード | 説明 |
---|---|
|
無効なパラメーターが検出されました。 |
|
ドライバーは、WDF_USB_DEVICE_CREATE_CONFIG_INITを呼び出したときに、クライアント コントラクトのバージョン を指定しませんでした。 |
|
メモリが不足していました。 |
このメソッドは、他の 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) |