/** @copydoc VBOXHDDBACKEND::pfnRead */ static int rawRead(void *pBackendData, uint64_t uOffset, size_t cbRead, PVDIOCTX pIoCtx, size_t *pcbActuallyRead) { int rc = VINF_SUCCESS; PRAWIMAGE pImage = (PRAWIMAGE)pBackendData; rc = vdIfIoIntFileReadUser(pImage->pIfIo, pImage->pStorage, uOffset, pIoCtx, cbRead); if (RT_SUCCESS(rc)) *pcbActuallyRead = cbRead; return rc; }
/** @copydoc VBOXHDDBACKEND::pfnRead */ static DECLCALLBACK(int) rawRead(void *pBackendData, uint64_t uOffset, size_t cbRead, PVDIOCTX pIoCtx, size_t *pcbActuallyRead) { int rc = VINF_SUCCESS; PRAWIMAGE pImage = (PRAWIMAGE)pBackendData; /* For sequential access do not allow to go back. */ if ( pImage->uOpenFlags & VD_OPEN_FLAGS_SEQUENTIAL && uOffset < pImage->offAccess) { *pcbActuallyRead = 0; return VERR_INVALID_PARAMETER; } rc = vdIfIoIntFileReadUser(pImage->pIfIo, pImage->pStorage, uOffset, pIoCtx, cbRead); if (RT_SUCCESS(rc)) { *pcbActuallyRead = cbRead; pImage->offAccess = uOffset + cbRead; } return rc; }