大量のデータが要求されるとXferDataが失敗する - KBA215067 - Community Translated (JA)

Version 1

    Community Translated by  NoTa_4591161    Version: *A

     

    Translation - English: XferData Fails when Large Amount of Data is Requested - KBA215067

     

    質問:

    XferData(またはBeginDataXfer)呼び出しを使用すると、大量のデータが要求され、転送が失敗する可能性があります。なぜこれが発生し、どうすれば修正できますでしょうか?

     

    回答:

    XferDataは、指定された量のデータを直接要求するか、ホストコントローラードライバーに送信します。ホストドライバーは、転送タイプ(BulkIsocInterrupt、またはControl)とOSバージョンに応じて、特定の最大サイズのみをキューに入れることができます。最大転送サイズの詳細については、 https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/usb-bandwidth-allocationにあるMSDNの記事をご参照願います。

     

    この問題を解決するには、大きなリクエストを小さなサイズの複数のリクエストに分割します(サイズは、指定されたOSで許可されている最大転送サイズと同じです)。

     

    また、packetMode(ブール値)と呼ばれるXferData3番目のパラメータを使用して、wMaxPacketSizeの倍数で要求をキューに入れることもできます。

     

    したがって、たとえば、C#のバルクエンドポイントの場合、これは次のようになります。

     

    bool isPacketMode = true;

    bool transferResult = BulkEndpoint.XferData(ref xferBufferref xferLengthisPacketMode);