2

WinUSB を使用するユーザー アプリケーション (ドライバーではない) の場合、WinUsb_ControlTransfer をオーバーラップ I/O と組み合わせて使用​​し、制御メッセージを非同期に送信します。非同期操作をキャンセルすることはできますか? WinUsb_AbortPipe は他のすべてのエンドポイントで機能しますが、コントロール エンドポイント (パイプ アドレスとして 0x00 または 0x80) が渡されると、「無効なパラメーター」エラーが発生します。CancelIo と CancelIoEx も試しましたが、どちらも WinUSB ハンドルで「無効なハンドル」エラーが発生します。私が見つけた唯一の関連情報はhttp://www.winvistatips.com/winusb-bugchecks-t335323.htmlにありますが、解決策はありません。これは単に不可能ですか?

4

1 に答える 1

0

おそらく元の質問者にとってはもう役に立たないでしょうが、他の誰かがこれに出くわした場合に備えて、最初に に渡したファイルハンドルでCancelIo()またはを使用できます。CancelIoEx()WinUsb_Initialize()

これは、のドキュメントに次のように記載されている方法に似ていますWinUsb_GetOverlappedResult

この関数は、Win32 API ルーチンの GetOverlappedResult に似ていますが、CreateFile から返されたファイル ハンドルを渡す代わりに、呼び出し元が WinUsb_Initialize から返されたインターフェイス ハンドルを渡す点が異なります。適切なハンドルが渡された場合、呼び出し元はどちらの API ルーチンも使用できます。WinUsb_GetOverlappedResult 関数は、インターフェイス ハンドルからファイル ハンドルを抽出し、GetOverlappedResult を呼び出します。

于 2020-01-10T17:11:38.507 に答える