/** @copydoc VBOXHDDBACKEND::pfnWrite */ static DECLCALLBACK(int) rawWrite(void *pBackendData, uint64_t uOffset, size_t cbWrite, PVDIOCTX pIoCtx, size_t *pcbWriteProcess, size_t *pcbPreRead, size_t *pcbPostRead, unsigned fWrite) { 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) { *pcbWriteProcess = 0; *pcbPostRead = 0; *pcbPreRead = 0; return VERR_INVALID_PARAMETER; } rc = vdIfIoIntFileWriteUser(pImage->pIfIo, pImage->pStorage, uOffset, pIoCtx, cbWrite, NULL, NULL); if (RT_SUCCESS(rc)) { *pcbWriteProcess = cbWrite; *pcbPostRead = 0; *pcbPreRead = 0; pImage->offAccess = uOffset + cbWrite; } return rc; }
/** @copydoc VBOXHDDBACKEND::pfnWrite */ static int rawWrite(void *pBackendData, uint64_t uOffset, size_t cbWrite, PVDIOCTX pIoCtx, size_t *pcbWriteProcess, size_t *pcbPreRead, size_t *pcbPostRead, unsigned fWrite) { int rc = VINF_SUCCESS; PRAWIMAGE pImage = (PRAWIMAGE)pBackendData; rc = vdIfIoIntFileWriteUser(pImage->pIfIo, pImage->pStorage, uOffset, pIoCtx, cbWrite, NULL, NULL); if (RT_SUCCESS(rc)) { *pcbWriteProcess = cbWrite; *pcbPostRead = 0; *pcbPreRead = 0; } return rc; }