【问题标题】:Canceling a WinUSB asynchronous control transfer取消 WinUSB 异步控制传输
【发布时间】:2010-01-10 12:33:47
【问题描述】:

对于使用 WinUSB 的用户应用程序(不是驱动程序),我将 WinUsb_ControlTransfer 与重叠 I/O 结合使用以异步发送控制消息。是否可以取消异步操作? WinUsb_AbortPipe 适用于所有其他端点,但在传递控制端点(0x00 或 0x80 作为管道地址)时会给出“无效参数”错误。我还尝试了 CancelIo 和 CancelIoEx,但都在 WinUSB 句柄上给出了“无效句柄”错误。我能找到的唯一相关信息是http://www.winvistatips.com/winusb-bugchecks-t335323.html,但没有提供任何解决方案。这不可能吗?

【问题讨论】:

    标签: asynchronous usb overlapped-io winusb


    【解决方案1】:

    可能对最初的提问者不再有用,但万一其他人遇到这种情况:您可以将 CancelIo()CancelIoEx() 与您最初传递给 WinUsb_Initialize() 的文件句柄一起使用。

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

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

    【讨论】:

    • 唷,我在审查队列中得到了这个,它是一个 10 年前问题的第一个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多