Jungo WinDriver  
Official Documentation

◆ WDU_StreamOpen()

DWORD DLLCALLCONV WDU_StreamOpen ( _In_ WDU_DEVICE_HANDLE  hDevice,
_In_ DWORD  dwPipeNum,
_In_ DWORD  dwBufferSize,
_In_ DWORD  dwRxSize,
_In_ BOOL  fBlocking,
_In_ DWORD  dwOptions,
_In_ DWORD  dwRxTxTimeout,
_Outptr_ WDU_STREAM_HANDLE phStream 
)

Opens a new data stream for the specified pipe.

Note
The streaming functions are currently supported only on Windows. A stream can be associated with any pipe except the control pipe (Pipe 0). The stream's data transfer direction – read/write – is derived from the direction of its pipe.
Parameters
[in]hDeviceA unique identifier for the device/interface.
[in]dwPipeNumThe number of the pipe for which to open the stream
[in]dwBufferSizeThe size, in bytes, of the stream's data buffer.
[in]dwRxSizeThe size, in bytes, of the data blocks that the stream reads from the device. This parameter is relevant only for read streams and must be <= dwBufferSize.
[in]fBlockingTRUE for a blocking stream (performs blocking I/O); FALSE for a non-blocking stream (non-blocking I/O).
[in]dwOptionsCan be a bit-mask of any of the following options: USB_ISOCH_NOASAP - For isochronous data transfers. Setting this option instructs the lower driver (usbd.sys) to use a preset frame number (instead of the next available frame) while performing the data transfer. Use this flag if you notice unused frames during the transfer, on low-speed or full-speed devices (USB 1.1 only) and only on Windows. USB_ISOCH_RESET - Resets the isochronous pipe before the data transfer. It also resets the pipe after minor errors, consequently allowing the transfer to continue. USB_ISOCH_FULL_PACKETS_ONLY - When set, do not transfer less than packet size on isochronous pipes. USB_BULK_INT_URB_SIZE_OVERRIDE_128K - Limits the size of the USB Request Block (URB) to 128KB. USB_STREAM_OVERWRITE_BUFFER_WHEN_FULL - When there is not enough free space in a read stream's data buffer to complete the transfer, overwrite old data in the buffer. (Applicable only to read streams).
[in]dwRxTxTimeoutMaximum time, in milliseconds, for the completion of a data transfer between the stream and the device. Zero = infinite wait.
[out]phStreamPointer to a unique identifier for the stream, to be returned by the function and passed to the other WDU_StreamXXX() functions.
Returns
WinDriver Error Code
DWORD dwStatus;
DWORD dwPipeNum, dwSize, dwBytesTransferred, cmd = MENU_RW_READ_PIPE;
VOID *pBuffer = NULL;
DWORD dwBufferSize = 0x20000;
dwStatus = WDU_StreamOpen(hDevice, dwPipeNum, dwBufferSize,
dwSize, TRUE, 0, TRANSFER_TIMEOUT, &stream);
if (dwStatus)
{
ERR("ReadWritePipesMenu: WDU_StreamOpen() failed. "
"error 0x%lx (\"%s\")\n", dwStatus, Stat2Str(dwStatus));
goto End_transfer;
}
dwStatus = WDU_StreamStart(stream);
if (dwStatus)
{
ERR("ReadWritePipesMenu: WDU_StreamStart() failed. error "
"0x%lx (\"%s\")\n", dwStatus, Stat2Str(dwStatus));
goto End_transfer;
}
if (cmd == MENU_RW_READ_PIPE)
{
dwStatus = WDU_StreamRead(stream, pBuffer, dwSize,
&dwBytesTransferred);
}
else
{
dwStatus = WDU_StreamWrite(stream, pBuffer, dwSize,
&dwBytesTransferred);
}
if (dwStatus)
{
BOOL fIsRunning;
DWORD dwLastError;
DWORD dwBytesInBuffer;
dwStatus = WDU_StreamGetStatus(stream, &fIsRunning,
&dwLastError, &dwBytesInBuffer);
if (!dwStatus)
dwStatus = dwLastError;
}
#define NULL
Definition: kpstdlib.h:268
#define TRUE
Definition: kpstdlib.h:264
const char *DLLCALLCONV Stat2Str(_In_ DWORD dwStatus)
Retrieves the status string that corresponds to a status code.
DWORD DLLCALLCONV WDU_StreamClose(_In_ WDU_STREAM_HANDLE hStream)
Closes an open stream.
DWORD DLLCALLCONV WDU_StreamGetStatus(_In_ WDU_STREAM_HANDLE hStream, _Outptr_ BOOL *pfIsRunning, _Outptr_ DWORD *pdwLastError, _Outptr_ DWORD *pdwBytesInBuffer)
Returns a stream's current status.
DWORD DLLCALLCONV WDU_StreamWrite(_In_ HANDLE hStream, _In_ const PVOID pBuffer, _In_ DWORD bytes, _Outptr_ DWORD *pdwBytesWritten)
Writes data from the application to a write stream.
DWORD DLLCALLCONV WDU_StreamRead(_In_ HANDLE hStream, _Outptr_ PVOID pBuffer, _In_ DWORD bytes, _Outptr_ DWORD *pdwBytesRead)
Reads data from a read stream to the application.
DWORD DLLCALLCONV WDU_StreamStart(_In_ WDU_STREAM_HANDLE hStream)
Starts a stream, i.e starts transfers between the stream and the device.
DWORD DLLCALLCONV WDU_StreamOpen(_In_ WDU_DEVICE_HANDLE hDevice, _In_ DWORD dwPipeNum, _In_ DWORD dwBufferSize, _In_ DWORD dwRxSize, _In_ BOOL fBlocking, _In_ DWORD dwOptions, _In_ DWORD dwRxTxTimeout, _Outptr_ WDU_STREAM_HANDLE *phStream)
Opens a new data stream for the specified pipe.
PVOID WDU_STREAM_HANDLE
Definition: wdu_lib.h:14