VirtualBox

Changeset 57064 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jul 23, 2015 4:22:04 PM (9 years ago)
Author:
vboxsync
Message:

Frontends/VBoxManage+Storage/VMDK: introduce support for creating raw partition VMDK images with readonly partitions (indicated by a 'r' suffix after the partition number)

Location:
trunk/src/VBox
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp

    r56918 r57064  
    15021502    if (!pszPartitions)
    15031503    {
    1504         RawDescriptor.fRawDisk = true;
     1504        RawDescriptor.uFlags = VBOXHDDRAW_DISK;
    15051505        RawDescriptor.pszRawDisk = rawdisk.c_str();
    15061506    }
    15071507    else
    15081508    {
    1509         RawDescriptor.fRawDisk = false;
     1509        RawDescriptor.uFlags = VBOXHDDRAW_NORMAL;
    15101510        RawDescriptor.pszRawDisk = NULL;
    15111511        RawDescriptor.cPartDescs = 0;
     
    15131513
    15141514        uint32_t uPartitions = 0;
     1515        uint32_t uPartitionsRO = 0;
    15151516
    15161517        const char *p = pszPartitions;
     
    15271528            uPartitions |= RT_BIT(u32);
    15281529            p = pszNext;
     1530            if (*p == 'r')
     1531            {
     1532                uPartitionsRO |= RT_BIT(u32);
     1533                p++;
     1534            }
    15291535            if (*p == ',')
    15301536                p++;
     
    16471653            if (uPartitions & RT_BIT(partitions.aPartitions[i].uIndex))
    16481654            {
     1655                if (uPartitionsRO & RT_BIT(partitions.aPartitions[i].uIndex))
     1656                    pPartDesc->uFlags |= VBOXHDDRAW_READONLY;
     1657
    16491658                if (fRelative)
    16501659                {
     
    17591768
    17601769#ifdef DEBUG_klaus
    1761     if (!RawDescriptor.fRawDisk)
     1770    if (!(RawDescriptor.uFlags & VBOXHDDRAW_DISK))
    17621771    {
    17631772        RTPrintf("#            start         length    startoffset  partdataptr  device\n");
  • trunk/src/VBox/Storage/VMDK.cpp

    r57007 r57064  
    32463246                case VMDKETYPE_HOSTED_SPARSE:
    32473247                    rc = vmdkFileOpen(pImage, &pExtent->pFile, pExtent->pszFullname,
    3248                                       VDOpenFlagsToFileOpenFlags(uOpenFlags,
     3248                                      VDOpenFlagsToFileOpenFlags(uOpenFlags | (pExtent->enmAccess == VMDKACCESS_READONLY) ? VD_OPEN_FLAGS_READONLY : 0,
    32493249                                                                 false /* fCreate */));
    32503250                    if (RT_FAILURE(rc))
     
    32733273                case VMDKETYPE_FLAT:
    32743274                    rc = vmdkFileOpen(pImage, &pExtent->pFile, pExtent->pszFullname,
    3275                                       VDOpenFlagsToFileOpenFlags(uOpenFlags,
     3275                                      VDOpenFlagsToFileOpenFlags(uOpenFlags | (pExtent->enmAccess == VMDKACCESS_READONLY) ? VD_OPEN_FLAGS_READONLY : 0,
    32763276                                                                 false /* fCreate */));
    32773277                    if (RT_FAILURE(rc))
     
    33653365    PVMDKEXTENT pExtent;
    33663366
    3367     if (pRaw->fRawDisk)
     3367    if (pRaw->uFlags & VBOXHDDRAW_DISK)
    33683368    {
    33693369        /* Full raw disk access. This requires setting up a descriptor
     
    33943394        pExtent->cNominalSectors = VMDK_BYTE2SECTOR(cbSize);
    33953395        pExtent->uSectorOffset = 0;
    3396         pExtent->enmAccess = VMDKACCESS_READWRITE;
     3396        pExtent->enmAccess = (pRaw->uFlags & VBOXHDDRAW_READONLY) ? VMDKACCESS_READONLY : VMDKACCESS_READWRITE;
    33973397        pExtent->fMetaDirty = false;
    33983398
    33993399        /* Open flat image, the raw disk. */
    34003400        rc = vmdkFileOpen(pImage, &pExtent->pFile, pExtent->pszFullname,
    3401                           VDOpenFlagsToFileOpenFlags(pImage->uOpenFlags & ~VD_OPEN_FLAGS_READONLY,
     3401                          VDOpenFlagsToFileOpenFlags(pImage->uOpenFlags | (pExtent->enmAccess == VMDKACCESS_READONLY) ? VD_OPEN_FLAGS_READONLY : 0,
    34023402                                                     false /* fCreate */));
    34033403        if (RT_FAILURE(rc))
     
    35073507                /* Create partition table flat image. */
    35083508                rc = vmdkFileOpen(pImage, &pExtent->pFile, pExtent->pszFullname,
    3509                                   VDOpenFlagsToFileOpenFlags(pImage->uOpenFlags,
     3509                                  VDOpenFlagsToFileOpenFlags(pImage->uOpenFlags | (pExtent->enmAccess == VMDKACCESS_READONLY) ? VD_OPEN_FLAGS_READONLY : 0,
    35103510                                                             true /* fCreate */));
    35113511                if (RT_FAILURE(rc))
     
    35373537                    pExtent->cNominalSectors = VMDK_BYTE2SECTOR(pPart->cbData);
    35383538                    pExtent->uSectorOffset = VMDK_BYTE2SECTOR(pPart->uStartOffset);
    3539                     pExtent->enmAccess = VMDKACCESS_READWRITE;
     3539                    pExtent->enmAccess = (pPart->uFlags & VBOXHDDRAW_READONLY) ? VMDKACCESS_READONLY : VMDKACCESS_READWRITE;
    35403540                    pExtent->fMetaDirty = false;
    35413541
    35423542                    /* Open flat image, the raw partition. */
    35433543                    rc = vmdkFileOpen(pImage, &pExtent->pFile, pExtent->pszFullname,
    3544                                       VDOpenFlagsToFileOpenFlags(pImage->uOpenFlags & ~VD_OPEN_FLAGS_READONLY,
     3544                                      VDOpenFlagsToFileOpenFlags(pImage->uOpenFlags | (pExtent->enmAccess == VMDKACCESS_READONLY) ? VD_OPEN_FLAGS_READONLY : 0,
    35453545                                                                 false /* fCreate */));
    35463546                    if (RT_FAILURE(rc))
     
    35743574
    35753575    rc = vmdkDescBaseSetStr(pImage, &pImage->Descriptor, "createType",
    3576                             pRaw->fRawDisk ?
     3576                            (pRaw->uFlags & VBOXHDDRAW_DISK) ?
    35773577                            "fullDevice" : "partitionedDevice");
    35783578    if (RT_FAILURE(rc))
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette