DeviceIoControlにより1回転送のサイズについて制限があるか
投稿者: adolf 投稿日時: 月, 2009/12/07 - 17:38
こんにちは。
DeviceIoControlによりデバイスから大量データ(1回受信)を受信するとき、
受信バッファーのサイズを124Mbぐらいに用意する場合、
ERROR_NO_SYSTEM_RESOURCES(1450) というエラーをもらいます。
1回転送のサイズまた受信のバッファについて、何か制限がありますか。
WinUSBのWinUsb_ReadPipeにより転送すれば、64Mbぐらいまで通信しかできません。
それ以上の場合ERROR_NO_SYSTEM_RESOURCES(1450) というエラーをもらいます。
1回送受信の場合最大転送サイズはありますか。あればどのぐらいでしょうか。
ご教授いただければ幸いです。

64MBもバッファを取っ
64MBもバッファを取って通信しようとしたことがありませんので、
最大いくつに制限されているのかと、どういう制約に縛られているのかは直ぐにわかりません。
過去の記憶だと、一般的にはUSBの送受信バッファは64KBぐらいでやっていたと思います。
またUSB1.1の頃、某OHCIホスト・コントローラでは、8KBを超える連続受信ができませんでした。
ERROR_NO_SYSTEM_RESOURCESというのですから、その通りなのだと思います。
WinUSBは万能ではないので、その程度の制約があってもおかしくありません。
ドライバの中でバッファを小さくとってグルグル回すのは普通に良くやる手法です。
hidaka
hidakaさん、いろいろ
hidakaさん、いろいろ教えてもらってありがとうございました。
もうすでに解決され
もうすでに解決されているかもしれませんが、一応情報まで。
Windows プラットフォームにおける I/O アクセスでの送受信バッファ サイズの上限は、I/O マネージャでの仕様制限に依存してるのではないかと思います。
例えば、Windows Vista 以降のフラットフォームでは、I/O マネージャが許容するデータ バッファ サイズは 64MB ですが、XP / 2000 プラットフォームでは 64KB となっているそうです。
ですので、今回 adolf さんが試された環境が Vista 以降のプラットフォームであるなら、「64Mbぐらいまで通信しかできません」というのは I/O マネージャ側の実装に起因した動作になると思います。
(XP でも 64MB までいけるのであれば、別の要因ということになりますが。)