Click or drag to resize

LowLevelRead

Reads raw bytes directly from a device without going through the formatted I/O read buffer.

virtual HRESULT LowLevelRead(BYTE* pBuf, long cbDesired, long* pcbActual, long lTimeout = CUR_TIMEOUT) override;

virtual HRESULT LowLevelRead(SAFEARRAY** pBuf, long cbDesired, long lTimeout = CUR_TIMEOUT) override;
Parameters
pBuf

[out] Array of bytes read from the device.

cbDesired

[in] Number of bytes to read from the device.

pcbActual

[out] Actual number of bytes read from 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 Queryf, ReadReadNumber, etc., the LowLevelRead function reads raw bytes directly from the device, rather than going through formatted I/O read 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 LowLevelRead function.

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

  // Read 1000 bytes
  hr = io.LowLevel.LowLevelRead(ppsaData, 1000);

  return hr;
}
See Also

Download a complete CHM version of this documentation here.