WinUsb_WriteIsochPipeAsap function (winusb.h)

The WinUsb_WriteIsochPipeAsap submits a request for writing the contents of a buffer to an isochronous OUT endpoint.


BOOL WinUsb_WriteIsochPipeAsap(
  [in]           WINUSB_ISOCH_BUFFER_HANDLE BufferHandle,
  [in]           ULONG                      Offset,
  [in]           ULONG                      Length,
  [in]           BOOL                       ContinueStream,
  [in, optional] LPOVERLAPPED               Overlapped


[in] BufferHandle

An opaque handle to the transfer buffer that was registered by a previous call to WinUsb_RegisterIsochBuffer.

[in] Offset

Offset into the buffer relative to the start the transfer.

[in] Length

Length in bytes of the transfer buffer.

[in] ContinueStream

Indicates that the transfer should only be submitted if it can be scheduled in the first frame after the last pending transfer.

[in, optional] Overlapped

Pointer to an OVERLAPPED structure used for asynchronous operations.

Return value

WinUsb_WriteIsochPipeAsap returns TRUE if the operation succeeds. Otherwise this function returns FALSE, and the caller can retrieve the logged error by calling GetLastError.

If the caller sets ContinueStream to TRUE, The transfer fails if Winusb.sys is unable to schedule the transfer to continue the stream without dropping one or more frames.


WinUsb_WriteIsochPipeAsap allows the USB driver stack to choose the starting frame number for the transfer. If one or more transfers are already pending on the endpoint, the transfer will be scheduled for the frame number immediately following the last frame number of the last currently pending transfer.

WinUsb_WriteIsochPipeAsap packetizes the transfer buffer so that in each 1ms interval, the host can send the maximum bytes allowed per interval. The maximum bytes is as specified by the endpoint descriptor for full and high-speed endpoints, and endpoint companion descriptor for SuperSpeed endpoints. If the caller submits multiple write requests to stream data to the device, the transfer size should be a multiple of the maximum bytes per interval (as returned by WinUsb_QueryPipeEx) * 8 / interval.

Because of the transfer packaging used in the underlying kernel-mode interface, the lowest latency notification to an application or driver is 1ms intervals.


Minimum supported client Windows 8.1
Minimum supported server Windows Server 2012 R2
Target Platform Universal
Header winusb.h (include Winusb.h)
Library Winusb.lib
DLL Winusb.dll

See also

Send USB isochronous transfers from a WinUSB desktop app

WinUSB Functions