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()orCancelIoEx()与您最初传递给WinUsb_Initialize().

这类似于文档中的WinUsb_GetOverlappedResult说法:

此函数与 Win32 API 例程 GetOverlappedResult 类似,但有一个区别 — 调用者传递从 WinUsb_Initialize 返回的接口句柄,而不是传递从 CreateFile 返回的文件句柄。如果传递了适当的句柄,调用者可以使用任一 API 例程。WinUsb_GetOverlappedResult 函数从接口句柄中提取文件句柄,然后调用 GetOverlappedResult。

于 2020-01-10T17:11:38.507 回答