I try to use VixDiskLib_Attach as below, but always get the error message "The parent virtual disk has been modified since the child was created". Can anyone give me a sample code? Thanks in advance!
//
//dchInfo.parent = "Z:
Jeegn
parent.vmdk";
//dchInfo.lchild = "Z:
Jeegn
lchild.vmdk";
//dchInfo.rchild = "Z:
Jeegn
rchild.vmdk";
//
void DoCreateAttach3(DiskChainInfo& dchInfo)
{
VixDiskLibConnectParams cnxParams = {0};
VixDiskLibConnection connection = NULL;
VixDiskLibCreateParams createParams;
bool lchildCreated = false, rchildCreated = false;
VixError vixError = 0;
try {
createParams.adapterType = (VixDiskLibAdapterType)3;
createParams.capacity = 16384;
createParams.diskType = VIXDISKLIB_DISK_MONOLITHIC_FLAT;
createParams.hwVersion = VIXDISKLIB_HWVERSION_WORKSTATION_5;
{color:#ff00ff}cout<<":::::::::::::::::::::Connect to localhost"<<endl;
vixError = VixDiskLib_Connect(&cnxParams, &connection);
CHECK_AND_THROW(vixError);
cout<<":::::::::::::::::::::Create parent Disk"<<endl;
vixError = VixDiskLib_Create(connection, dchInfo.parent, &createParams, NULL, NULL);
CHECK_AND_THROW(vixError);
cout<<":::::::::::::::::::::Open Parent Disk"<<endl;
VixDisk parentDisk(connection, dchInfo.parent, VIXDISKLIB_FLAG_OPEN_READ_ONLY);
cout<<":::::::::::::::::::::Create right child Disk"<<endl;
VixDiskLibCreateParams createParams;
createParams.adapterType = (VixDiskLibAdapterType)3;
createParams.capacity = 16384;
createParams.diskType = VIXDISKLIB_DISK_MONOLITHIC_SPARSE;
createParams.hwVersion = VIXDISKLIB_HWVERSION_WORKSTATION_5;
vixError = VixDiskLib_Create(connection, dchInfo.rchild, &createParams, NULL, NULL);
CHECK_AND_THROW(vixError);
cout<<":::::::::::::::::::::Open right child Disk"<<endl;VixDisk rchildDisk(connection, dchInfo.rchild, VIXDISKLIB_FLAG_OPEN_READ_ONLY);cout<<":::::::::::::::::::::Attach right child Disk to parent Disk"<<endl;
vixError = VixDiskLib_Attach(parentDisk.Handle(), rchildDisk.Handle()); CHECK_AND_THROW(vixError);
cout<<":::::::::::::::::::::Attach success"<<endl;
parentDisk.Close();
rchildDisk.Close();
VixDiskLib_Disconnect(connection);
} catch (const VixDiskLibErrWrapper& e) {
if (connection)
VixDiskLib_Disconnect(connection);
cout << "Error: " << e.File() << ":" << e.Line() << " " <<
std::hex << e.ErrorCode() << " " << e.Description() << "\n";
}
}