078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/** @file
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * VBox HDD container test utility, memory disk/file.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/*
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * Copyright (C) 2011 Oracle Corporation
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * available from http://www.virtualbox.org. This file is free software;
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * you can redistribute it and/or modify it under the terms of the GNU
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * General Public License (GPL) as published by the Free Software
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync#ifndef __VDMemDisk_h__
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync#define __VDMemDisk_h__
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync#include <iprt/sg.h>
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/** Handle to the a memory disk. */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsynctypedef struct VDMEMDISK *PVDMEMDISK;
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/** Pointer to a memory disk handle. */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsynctypedef PVDMEMDISK *PPVDMEMDISK;
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/**
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * Creates a new memory disk with the given size.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @returns VBOX status code.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param ppMemDisk Where to store the memory disk handle.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param cbSize Size of the disk if it is fixed.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * If 0 the disk grows when it is written to
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * and the size can be changed with
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * VDMemDiskSetSize().
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsyncint VDMemDiskCreate(PPVDMEMDISK ppMemDisk, uint64_t cbSize);
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/**
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * Destroys a memory disk.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @returns nothing.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pMemDisk The memory disk to destroy.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsyncvoid VDMemDiskDestroy(PVDMEMDISK pMemDisk);
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/**
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * Writes the specified amount of data from the S/G buffer at
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * the given offset.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @returns VBox status code.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pMemDisk The memory disk handle.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param off Where to start writing to.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param cbWrite How many bytes to write.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pSgBuf The S/G buffer to write from.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsyncint VDMemDiskWrite(PVDMEMDISK pMemDisk, uint64_t off, size_t cbWrite, PRTSGBUF pSgBuf);
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/**
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * Reads the specified amount of data into the S/G buffer
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * starting from the given offset.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @returns VBox status code.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pMemDisk The memory disk handle.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param off Where to start reading from.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param cbRead The amount of bytes to read.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pSgBuf The S/G buffer to read into.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsyncint VDMemDiskRead(PVDMEMDISK pMemDisk, uint64_t off, size_t cbRead, PRTSGBUF pSgBuf);
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/**
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * Sets the size of the memory disk.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @returns VBox status code.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pMemDisk The memory disk handle.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param cbSize The new size to set.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsyncint VDMemDiskSetSize(PVDMEMDISK pMemDisk, uint64_t cbSize);
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/**
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * Gets the current size of the memory disk.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @returns VBox status code.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pMemDisk The memory disk handle.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pcbSize Where to store the size of the memory
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * disk.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsyncint VDMemDiskGetSize(PVDMEMDISK pMemDisk, uint64_t *pcbSize);
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/**
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * Dumps the memory disk to a file.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @returns VBox status code.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pMemDisk The memory disk handle.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pcszFilename Where to dump the content.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsyncint VDMemDiskWriteToFile(PVDMEMDISK pMemDisk, const char *pcszFilename);
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync/**
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * Reads the content of a file into the given memory disk.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * All data stored in the memory disk will be overwritten.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @returns VBox status code.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync *
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pMemDisk The memory disk handle.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync * @param pcszFilename The file to load from.
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync */
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsyncint VDMemDiskReadFromFile(PVDMEMDISK pMemDisk, const char *pcszFilename);
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync/**
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync * Compares the given range of the memory disk with a provided S/G buffer.
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync *
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync * @returns whatever memcmp returns.
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync *
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync * @param pMemDisk The memory disk handle.
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync * @param off Where to start comparing.
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync * @param cbCmp How many bytes to compare.
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync * @param pSgBuf The S/G buffer to compare with.
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync */
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsyncint VDMemDiskCmp(PVDMEMDISK pMemDisk, uint64_t off, size_t cbCmp, PRTSGBUF pSgBuf);
dd5eddcb518723b83065517ffce68dd63f7faad9vboxsync
078c5b8c5c814755aab943bf62cadef7e91c419cvboxsync#endif /* __VDMemDisk_h__ */