質問: ### 前提・実現したいこと マイコンで作った実験用ボードにUSBチップ(USBN9604)があり、 それをWindowsXPで接続使用しています。(転送はバルク) UUSBDという汎用DLLを使用してC#で操作しているのですが、 USBコネクタを挿したままで、windows側でUSB解放したあと、再接続してうまくhandle取得できていたのに、windows7以降では再取得できません。一度USBコネクタを抜いてからまた接続すると正常です。 これってwindowsの仕様?それとも私のソフト? ### 補足情報(言語/FW/ツール等のバージョンなど) windowsは32bit framework3.5,4.5でも同じ現象
回答: UUSBDをどのように使用しているのかも UUSBDの実装の中身も分からないので、WindowsにおけるUSB制御一般の話なりますが、 USB通信の異常系の調査は、USBバスアナライザのデータを取得して調査するのが一番です。 またWin7以降であれば、USBバスアナライザが無くても、USB Event Tracing for Windows の機能を使用してUSBドライバがどのような制御をしているのかモニタリング可能ですので、そこからでもある程度原因調査が出来ます。 Windows の USB イベント トレーシング.aspx) 一方、WindowsのバージョンによってUSBドライバの動作の違いという観点からだと、 「OSバージョンによって動作が違うことが有る」 というのが回答になります。 例えば、IOCTL_USB_HUB_CYCLE_PORT.aspx) だと、 > > Supported on Windows 8 and later versions of Windows, if the caller is running as Administrator. Supported on Microsoft Windows Server 2003, Windows XP-based versions of Windows. Not supported on Windows 7, Windows Vista, and Windows Server 2008. > > > となっており、「XPでは存在していたが、Win7で廃止され、Win8で(機能アップして)復活した」なんて機能も存在します。 直接のご回答にはなっていませんが、ご参考までに。