Click or drag to resize

LowLevelWrite

Writes raw bytes directly to a device without going through the formatted I/O write buffer.

virtual HRESULT LowLevelWrite(BYTE* pBuf, long cbDesired, long* pcbActual = NULL, bool bAddTrailing = true, long lTimeout = CUR_TIMEOUT) override;	

virtual HRESULT LowLevelWrite(SAFEARRAY* pBuf, long cbDesired = -1, long* pcbActual = NULL, bool bAddTrailing = true, long lTimeout = CUR_TIMEOUT) override;	
Parameters
pBuf

[int] Array of bytes to write to the device.

cbDesired

[in] Number of bytes to write to the device. If pBuf is a SAFEARRAY and cbDesired is -1, then the entire contents of the SAFEARRAY are sent to the device.

pcbActual

[out] Actual number of bytes written to the device. pcbActual may be set to NULL if the caller is not interested in knowing the actual number of bytes written.

bAddTrailing

[in] true to have the trailing characters specified by the SetTrailingForWrites function automatically added to pBuf before sending to the device.

lTimeout

[in] I/O timeout value in milliseconds.

Return Value

Returns S_OK if successful, otherwise a failure HRESULT.

Remarks

Unlike the buffered I/O functions, such as Printf, Write and WriteNumber, etc., the LowLevelWrite function sends raw bytes directly to the device, rather than going through formatted I/O write buffer.

Caution note Caution

It is critical that these low-level functions not be intermixed with buffered I/O functions in a sequence of operations, such as a set of calls implementing a single driver method. The buffered I/O functions assume that all data read from or sent to the device passes through the I/O buffer, and intermixing these calls with low-level functions that directly access the device can produce incorrect results and/or I/O errors.

Example

The following example demonstrates use of the LowLevelWrite function.

C++
// CoAcme4321.cpp
STDMETHODIMP Acme4321::IAcme4321_Configure(SAFEARRAY* psaData)
{
  HRESULT hr = S_OK;

  // Write 1000 bytes from psaData
  hr = io.LowLevel.LowLevelWrite(psaData, 1000);

  return hr;
}
See Also

Download a complete CHM version of this documentation here.