Difference between revisions of "Unit VirtualDisk"

From Ultibo.org
Jump to: navigation, search
 
(3 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
----
 
----
  
'''Ultibo Virtual Disk interface unit'''
+
'''Ultibo Virtual Disk Interface unit'''
 
+
''To be documented''
+
  
 
=== Constants ===
 
=== Constants ===
Line 56: Line 54:
 
</div></div>
 
</div></div>
 
<br />  
 
<br />  
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Initramfs constants''' <code> memoryInitramfs* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>memoryInitramfsName = 'INITRAMFS';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<div style="font-size: 14px; padding-left: 12px;">'''VMware constants''' <code> vmware* </code></div>
 
<div style="font-size: 14px; padding-left: 12px;">'''VMware constants''' <code> vmware* </code></div>
Line 1,057: Line 1,065:
  
  
'''Virtual disk controller'''
+
'''Virtual disk specific classes'''
  
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
<code>TVirtualDiskController = class(TDiskController)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver);</code>
+
| [[TVirtualDiskController|<code>TVirtualDiskController = class(TDiskController)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function ControllerInit:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LocateDevices:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function Read(ADevice:TDiskDevice; ASector:LongWord; ACount:Word; var ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Write(ADevice:TDiskDevice; ASector:LongWord; ACount:Word; const ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function Reset(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LockMedia(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function UnlockMedia(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function EjectMedia(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function MediaReady(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function MediaChanged(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function MediaLocked(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function Information(ADevice:TDiskDevice):String; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LBA(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function MediaType(ADevice:TDiskDevice):TMediaType; override;</code>
+
| &nbsp;
+
|-
+
| <code>function FloppyType(ADevice:TDiskDevice):TFloppyType; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Ready(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Locked(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Lockable(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Readable(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Writeable(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Removable(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ChangeLine(ADevice:TDiskDevice):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function PhysicalCylinders(ADevice:TDiskDevice):LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function PhysicalHeads(ADevice:TDiskDevice):LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function PhysicalSectors(ADevice:TDiskDevice):LongWord; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LogicalCylinders(ADevice:TDiskDevice):LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function LogicalHeads(ADevice:TDiskDevice):LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function LogicalSectors(ADevice:TDiskDevice):LongWord; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function SectorSize(ADevice:TDiskDevice):Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function SectorCount(ADevice:TDiskDevice):Int64; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk device'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskDevice = class(TDiskDevice)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
| [[TVirtualDiskDevice|<code>TVirtualDiskDevice = class(TDiskDevice)</code>]]
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function DeviceInit:Boolean; override;</code>
+
| style="width: 50%;"|&nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LocatePartitions:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function LocateVolumes:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreatePartition(AParent:TDiskPartition; APartitionId:Byte; ACount:LongWord; AActive:Boolean):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function DeletePartition(APartition:TDiskPartition):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ModifyPartition(APartition:TDiskPartition; APartitionId:Byte):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ActivatePartition(APartition:TDiskPartition; AActive:Boolean):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ShrinkPartition(APartition:TDiskPartition; const AStart,ASize:Int64):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ExpandPartition(APartition:TDiskPartition; const AStart,ASize:Int64):Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk partition'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskPartition = class(TDiskPartition)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
| [[TVirtualDiskPartition|<code>TVirtualDiskPartition = class(TDiskPartition)</code>]]
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function PartitionInit:Boolean; override;</code>
+
| style="width: 50%;"|&nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LocatePartitions:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function LocateVolumes:Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk image'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskImage = class(TDiskImage)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; AController:TDiskController; const AName:String; AImageNo:Integer);</code>
+
| [[TVirtualDiskImage|<code>TVirtualDiskImage = class(TDiskImage)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>FFlags:LongWord;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FExtents:TFileSysList;</code>
+
| List of Virtual Disk Extents
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FBase:TVirtualDiskExtent;</code>
+
| The first extent of the image
+
|-
+
| <code>FCurrent:TVirtualDiskExtent;</code>
+
| The current delta extent if applicable
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetCylinders:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetHeads:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectors:LongWord; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function ReadExtent(AExtent:TVirtualDiskExtent; ASector:LongWord; ACount:Word; var ABuffer):Word; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function WriteExtent(AExtent:TVirtualDiskExtent; ASector:LongWord; ACount:Word; const ABuffer):Word; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadExtents:Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function CloseExtents:Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CheckExtent(ADelta,AParent:TVirtualDiskExtent; const AFilename:String):Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function LoadExtent(ADelta,AParent:TVirtualDiskExtent; const AFilename:String):TVirtualDiskExtent; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AddExtent(AParent:TVirtualDiskExtent; const AFilename:String):TVirtualDiskExtent; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function RemoveExtent(AExtent:TVirtualDiskExtent):Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function SetExtent(AExtent:TVirtualDiskExtent):Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function GetExtent(const ASector:Int64; AWrite,ALock:Boolean):TVirtualDiskExtent; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function FindExtent(const AFilename:String; ALock:Boolean):TVirtualDiskExtent; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadTables:Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadTable(AExtent:TVirtualDiskExtent; ATableNo:LongWord):TVirtualDiskTable; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AddTable(AExtent:TVirtualDiskExtent):TVirtualDiskTable; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function RemoveTable(ATable:TVirtualDiskTable):Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function SetTable(ATable:TVirtualDiskTable):Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function GetTable(AExtent:TVirtualDiskExtent; const ASector:Int64; AWrite:Boolean):TVirtualDiskTable; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadBlocks(ATable:TVirtualDiskTable):Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadBlock(ATable:TVirtualDiskTable; ABlockNo:LongWord):TVirtualDiskBlock; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AddBlock(ATable:TVirtualDiskTable):TVirtualDiskBlock; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function RemoveBlock(ABlock:TVirtualDiskBlock):Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function SetBlock(ABlock:TVirtualDiskBlock):Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function GetBlock(ATable:TVirtualDiskTable; const ASector:Int64; AWrite:Boolean):TVirtualDiskBlock; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LocateDelta(AExtent:TVirtualDiskExtent):String; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function LocateParent(AExtent:TVirtualDiskExtent):String; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function LocateSibling(AExtent:TVirtualDiskExtent):String; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property Flags:LongWord read FFlags write FFlags;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property Extents:TFileSysList read FExtents;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property Base:TVirtualDiskExtent read FBase;</code>
+
| &nbsp;
+
|-
+
| <code>property Current:TVirtualDiskExtent read FCurrent;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function IsSplit:Boolean; virtual;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk memory image'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskMemoryImage = class(TVirtualDiskImage)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; AController:TDiskController; const AName:String; AImageNo:Integer);</code>
+
| [[TVirtualDiskMemoryImage|<code>TVirtualDiskMemoryImage = class(TVirtualDiskImage)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FData:Pointer;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>function GetReady:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetSectorSize:Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectorCount:Int64; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetPartitionId:Byte; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>procedure SetName(const AName:String); override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function Read(ASector:LongWord; ACount:Word; var ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Write(ASector:LongWord; ACount:Word; const ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function ConvertImage(AImageType:TImageType):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function CreateImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function CloseImage:Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk file image'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskFileImage = class(TVirtualDiskImage)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; AController:TDiskController; const AName:String; AImageNo:Integer);</code>
+
| [[TVirtualDiskFileImage|<code>TVirtualDiskFileImage = class(TVirtualDiskImage)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FHandle:THandle;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>function GetReady:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetSectorSize:Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectorCount:Int64; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetPartitionId:Byte; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function Read(ASector:LongWord; ACount:Word; var ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Write(ASector:LongWord; ACount:Word; const ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function OpenImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function CloseImage:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ResizeImage(const ASectorCount:Int64):Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk device image'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskDeviceImage = class(TVirtualDiskImage)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; AController:TDiskController; const AName:String; AImageNo:Integer);</code>
+
| [[TVirtualDiskDeviceImage|<code>TVirtualDiskDeviceImage = class(TVirtualDiskImage)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FHandle:THandle;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>function GetReady:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetCylinders:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetHeads:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectors:LongWord; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetSectorSize:Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectorCount:Int64; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetPartitionId:Byte; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function Read(ASector:LongWord; ACount:Word; var ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Write(ASector:LongWord; ACount:Word; const ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function ConvertImage(AImageType:TImageType):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ShrinkImage(const ASize:Int64):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ExpandImage(const ASize:Int64):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function OpenImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function CloseImage:Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk ISO image'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskIsoImage = class(TVirtualDiskImage)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; AController:TDiskController; const AName:String; AImageNo:Integer);</code>
+
| [[TVirtualDiskIsoImage|<code>TVirtualDiskIsoImage = class(TVirtualDiskImage)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FHandle:THandle;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>function GetReady:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetSectorSize:Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectorCount:Int64; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function Read(ASector:LongWord; ACount:Word; var ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Write(ASector:LongWord; ACount:Word; const ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function ConvertImage(AImageType:TImageType):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function OpenImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function CloseImage:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ResizeImage(const ASectorCount:Int64):Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk Bochs image'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskBochsImage = class(TVirtualDiskImage)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; AController:TDiskController; const AName:String; AImageNo:Integer);</code>
+
| [[TVirtualDiskBochsImage|<code>TVirtualDiskBochsImage = class(TVirtualDiskImage)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>function GetReady:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetCylinders:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetHeads:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectors:LongWord; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetSectorSize:Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectorCount:Int64; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function Read(ASector:LongWord; ACount:Word; var ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Write(ASector:LongWord; ACount:Word; const ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Allocated(ASector:LongWord; ACount:Word):Word; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function OpenImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function CloseImage:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ResizeImage(const ASectorCount:Int64):Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VMware image'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVmwareImage = class(TVirtualDiskImage)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; AController:TDiskController; const AName:String; AImageNo:Integer);</code>
+
| [[TVirtualDiskVmwareImage|<code>TVirtualDiskVmwareImage = class(TVirtualDiskImage)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>function GetAttributes:LongWord;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>FDescriptor:TVirtualDiskExtent;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetReady:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetCylinders:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetHeads:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectors:LongWord; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetSectorSize:Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectorCount:Int64; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property Descriptor:TVirtualDiskExtent read FDescriptor;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function ImageInit:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function Read(ASector:LongWord; ACount:Word; var ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Write(ASector:LongWord; ACount:Word; const ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Allocated(ASector:LongWord; ACount:Word):Word; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadDescriptor(const AFilename:String):Boolean;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AddDescriptor(const AFilename:String):TVirtualDiskVmwareExtent;</code>
+
| &nbsp;
+
|-
+
| <code>function RemoveDescriptor(AExtent:TVirtualDiskVmwareExtent):Boolean;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function SetDescriptor(AExtent:TVirtualDiskVmwareExtent):Boolean;</code>
+
| &nbsp;
+
|-
+
| <code>function GetDescriptor:TVirtualDiskVmwareExtent;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function OpenImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function CloseImage:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ResizeImage(const ASectorCount:Int64):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateSnapshot:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function DeleteSnapshot:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function MergeSnapshot:Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VPC image'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVpcImage = class(TVirtualDiskImage)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; AController:TDiskController; const AName:String; AImageNo:Integer);</code>
+
| [[TVirtualDiskVpcImage|<code>TVirtualDiskVpcImage = class(TVirtualDiskImage)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>function GetAttributes:LongWord;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function ChecksumFooter(AFooter:PVpcHardDiskFooter):LongWord;</code>
+
| &nbsp;
+
|-
+
| <code>function ChecksumSparse(ASparse:PVpcDynamicDiskHeader):LongWord;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function RoundToSector(AValue:LongWord;ASectorSize:Word):LongWord;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>function GetReady:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetCylinders:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetHeads:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectors:LongWord; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetSectorSize:Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectorCount:Int64; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function ReadExtent(AExtent:TVirtualDiskExtent; ASector:LongWord; ACount:Word; var ABuffer):Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function WriteExtent(AExtent:TVirtualDiskExtent; ASector:LongWord; ACount:Word; const ABuffer):Word; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadExtents:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CheckExtent(ADelta,AParent:TVirtualDiskExtent; const AFilename:String):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function LoadExtent(ADelta,AParent:TVirtualDiskExtent; const AFilename:String):TVirtualDiskExtent; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AddExtent(AParent:TVirtualDiskExtent; const AFilename:String):TVirtualDiskExtent; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function SetExtent(AExtent:TVirtualDiskExtent):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetExtent(const ASector:Int64; AWrite,ALock:Boolean):TVirtualDiskExtent; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadTables:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadTable(AExtent:TVirtualDiskExtent; ATableNo:LongWord):TVirtualDiskTable; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AddTable(AExtent:TVirtualDiskExtent):TVirtualDiskTable; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function SetTable(ATable:TVirtualDiskTable):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadBlocks(ATable:TVirtualDiskTable):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadBlock(ATable:TVirtualDiskTable; ABlockNo:LongWord):TVirtualDiskBlock; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AddBlock(ATable:TVirtualDiskTable):TVirtualDiskBlock; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function SetBlock(ABlock:TVirtualDiskBlock):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetBlock(ATable:TVirtualDiskTable; const ASector:Int64; AWrite:Boolean):TVirtualDiskBlock; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function TestBlock(ABlock:TVirtualDiskBlock; const ASector:Int64; ACount:LongWord; AUsed:Boolean):LongWord;</code>
+
| &nbsp;
+
|-
+
| <code>function MarkBlock(ABlock:TVirtualDiskBlock; const ASector:Int64; ACount:LongWord; AUsed:Boolean):Boolean;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function TestBitmap(ABuffer:Pointer; ASize,AStart,ACount:LongWord; AUsed:Boolean):LongWord;</code>
+
| &nbsp;
+
|-
+
| <code>function MarkBitmap(ABuffer:Pointer; ASize,AStart,ACount:LongWord; AUsed:Boolean):Boolean;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LocateDelta(AExtent:TVirtualDiskExtent):String; override;</code>
+
| &nbsp;
+
|-
+
| <code>function LocateParent(AExtent:TVirtualDiskExtent):String; override;</code>
+
| &nbsp;
+
|-
+
| <code>function LocateSibling(AExtent:TVirtualDiskExtent):String; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function ImageInit:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function Read(ASector:LongWord; ACount:Word; var ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Write(ASector:LongWord; ACount:Word; const ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Allocated(ASector:LongWord; ACount:Word):Word; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function OpenImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function CloseImage:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ResizeImage(const ASectorCount:Int64):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateSnapshot:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function DeleteSnapshot:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function MergeSnapshot:Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VirtualBox image'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVboxImage = class(TVirtualDiskImage)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; AController:TDiskController; const AName:String; AImageNo:Integer);</code>
+
| [[TVirtualDiskVboxImage|<code>TVirtualDiskVboxImage = class(TVirtualDiskImage)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>function GetAttributes:LongWord;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>function GetReady:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetCylinders:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetHeads:LongWord; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectors:LongWord; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetSectorSize:Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetSectorCount:Int64; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function ReadExtent(AExtent:TVirtualDiskExtent; ASector:LongWord; ACount:Word; var ABuffer):Word; override;</code>
+
| &nbsp;
+
|-
+
| <code>function WriteExtent(AExtent:TVirtualDiskExtent; ASector:LongWord; ACount:Word; const ABuffer):Word; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadExtents:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CheckExtent(ADelta,AParent:TVirtualDiskExtent; const AFilename:String):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function LoadExtent(ADelta,AParent:TVirtualDiskExtent; const AFilename:String):TVirtualDiskExtent; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AddExtent(AParent:TVirtualDiskExtent; const AFilename:String):TVirtualDiskExtent; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function SetExtent(AExtent:TVirtualDiskExtent):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function GetExtent(const ASector:Int64; AWrite,ALock:Boolean):TVirtualDiskExtent; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadTables:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LoadTable(AExtent:TVirtualDiskExtent; ATableNo:LongWord):TVirtualDiskTable; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AddTable(AExtent:TVirtualDiskExtent):TVirtualDiskTable; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function SetTable(ATable:TVirtualDiskTable):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function LocateDelta(AExtent:TVirtualDiskExtent):String; override;</code>
+
| &nbsp;
+
|-
+
| <code>function LocateParent(AExtent:TVirtualDiskExtent):String; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function ImageInit:Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function Read(ASector:LongWord; ACount:Word; var ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Write(ASector:LongWord; ACount:Word; const ABuffer):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function Allocated(ASector:LongWord; ACount:Word):Word; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function OpenImage(AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function CloseImage:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ResizeImage(const ASectorCount:Int64):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateSnapshot:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function DeleteSnapshot:Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function MergeSnapshot:Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual recognizer'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualRecognizer = class(TRecognizer)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; AController:TDiskController);</code>
+
| [[TVirtualRecognizer|<code>TVirtualRecognizer = class(TRecognizer)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>FController:TDiskController;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetName:String; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function RecognizeImage(AImage:TDiskImage):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function MountImage(AImage:TDiskImage):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function InsertImage(AImage:TDiskImage):Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk resizer'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskResizer = class(TDiskResizer)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; ARecognizer:TRecognizer);</code>
+
| [[TVirtualDiskResizer|<code>TVirtualDiskResizer = class(TDiskResizer)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function AcceptImage(AImage:TDiskImage; const ASize:Int64):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function ShrinkImage(AImage:TDiskImage; const ASize:Int64):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function ExpandImage(AImage:TDiskImage; const ASize:Int64):Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk copier'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskCopier = class(TDiskCopier)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; ARecognizer:TRecognizer);</code>
+
| [[TVirtualDiskCopier|<code>TVirtualDiskCopier = class(TDiskCopier)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function AcceptImage(AImage,ADest:TDiskImage):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CopyImage(AImage,ADest:TDiskImage):Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk imager'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskImager = class(TDiskImager)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(ADriver:TFileSysDriver; ARecognizer:TRecognizer; AController:TDiskController);</code>
+
| [[TVirtualDiskImager|<code>TVirtualDiskImager = class(TDiskImager)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>function CreateImageByType(const AName:String; AImageType:TImageType):TDiskImage;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>FController:TDiskController;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function AcceptImage(AImage:TDiskImage; const AName:String; AImageType:TImageType; AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateImage(AImage:TDiskImage; const AName:String; AImageType:TImageType; AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function OpenImage(AImage:TDiskImage; const AName:String; AImageType:TImageType; AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64; ACylinders,AHeads,ASectors:LongWord; APartitionId:Byte):Integer; override;</code>
+
| &nbsp;
+
|-
+
| <code>function CloseImage(AImage:TDiskImage):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AcceptSnapshot(AImage:TDiskImage):Boolean; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function CreateSnapshot(AImage:TDiskImage):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function DeleteSnapshot(AImage:TDiskImage):Boolean; override;</code>
+
| &nbsp;
+
|-
+
| <code>function MergeSnapshot(AImage:TDiskImage):Boolean; override;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk extent'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskExtent = class(TListObject)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
|colspan="2"|Note: Represents an Extent (usually a file) forming part of a virtual disk
+
| [[TVirtualDiskExtent|<code>TVirtualDiskExtent = class(TListObject)</code>]]
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>constructor Create(AImage:TVirtualDiskImage; ADelta,AParent:TVirtualDiskExtent);</code>
+
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FLock:TMutexHandle;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>FImage:TVirtualDiskImage;</code>
+
| &nbsp;
+
|-
+
| <code>FDelta:TVirtualDiskExtent;</code>
+
| &nbsp;
+
|-
+
| <code>FParent:TVirtualDiskExtent;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FFlags:LongWord;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FFilename:String;</code>
+
| Filename of the file backing this Extent
+
|-
+
| <code>FHandle:THandle;</code>
+
| DiskDriver Handle to the file of this Extent
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FDataOffset:Int64;</code>
+
| Absolute byte offset of Data in file (Where Applicable)
+
|-
+
| <code>FBlockSize:LongWord;</code>
+
| Size of each data block in file
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FStartSector:Int64;</code>
+
| First Sector contained by this Extent
+
|-
+
| <code>FSectorCount:Int64;</code>
+
| Number of Sectors contained by this Extent
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FBlockShiftCount:LongWord;</code>
+
| Sector to Block Shift Count
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetFilename:String;</code>
+
| &nbsp;
+
|-
+
| <code>procedure SetFilename(const AFilename:String);</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function GetBlockShiftCount:LongWord; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property Image:TVirtualDiskImage read FImage;</code>
+
| &nbsp;
+
|-
+
| <code>property Delta:TVirtualDiskExtent read FDelta write FDelta;</code>
+
| &nbsp;
+
|-
+
| <code>property Parent:TVirtualDiskExtent read FParent write FParent;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property Flags:LongWord read FFlags write FFlags;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property Filename:String read GetFilename write SetFilename;</code>
+
| &nbsp;
+
|-
+
| <code>property Handle:THandle read FHandle write FHandle;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property DataOffset:Int64 read FDataOffset write FDataOffset;</code>
+
| &nbsp;
+
|-
+
| <code>property BlockSize:LongWord read FBlockSize write FBlockSize;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property StartSector:Int64 read FStartSector write FStartSector;</code>
+
| &nbsp;
+
|-
+
| <code>property SectorCount:Int64 read FSectorCount write FSectorCount;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property BlockShiftCount:LongWord read FBlockShiftCount write FBlockShiftCount;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function AcquireLock:Boolean;</code>
+
| &nbsp;
+
|-
+
| <code>function ReleaseLock:Boolean;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function IsFixed:Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function IsDynamic:Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function IsBase:Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
| <code>function IsDelta:Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function IsDevice:Boolean; virtual;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function HasDelta:Boolean; virtual;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VMware extent'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVmwareExtent = class(TVirtualDiskExtent)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
| [[TVirtualDiskVmwareExtent|<code>TVirtualDiskVmwareExtent = class(TVirtualDiskExtent)</code>]]
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>function IsDescriptor:Boolean;</code>
+
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>function HasDescriptor:Boolean;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VPC extent'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVpcExtent = class(TVirtualDiskExtent)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(AImage:TVirtualDiskImage; ADelta,AParent:TVirtualDiskExtent);</code>
+
| [[TVirtualDiskVpcExtent|<code>TVirtualDiskVpcExtent = class(TVirtualDiskExtent)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FHeader:PVpcHardDiskFooter;</code>
+
| &nbsp;
+
|-
+
| <code>FFooter:PVpcHardDiskFooter;</code>
+
| &nbsp;
+
|-
+
| <code>FSparse:PVpcDynamicDiskHeader;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FHeaderOffset:Int64;</code>
+
| Absolute byte offset of Header in file
+
|-
+
| <code>FHeaderSize:LongWord;</code>
+
| Size of Header in image
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FFooterOffset:Int64;</code>
+
| Absolute byte offset of Footer in file
+
|-
+
| <code>FFooterSize:LongWord;</code>
+
| Size of Footer in image
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FSparseOffset:Int64;</code>
+
| Absolute byte offset of Dynamic Header in file
+
|-
+
| <code>FSparseSize:LongWord;</code>
+
| Size of Dynamic Header in image
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>FTable:TVirtualDiskVpcTable;</code>
+
| VirtualPC images contain only one Table per Extent
+
|-
+
| <code>FGroups:TFileSysList;</code>
+
| Block bitmap Groups
+
|-
+
| <code>FGroupLocal:TMutexHandle;</code>
+
| Local Lock shared by all Block bitmap Groups
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property Header:PVpcHardDiskFooter read FHeader;</code>
+
| &nbsp;
+
|-
+
| <code>property Footer:PVpcHardDiskFooter read FFooter;</code>
+
| &nbsp;
+
|-
+
| <code>property Sparse:PVpcDynamicDiskHeader read FSparse;</code>
+
| &nbsp;
+
|-
+
| <code>property Table:TVirtualDiskVpcTable read FTable;</code>
+
| &nbsp;
+
|-
+
| <code>property Groups:TFileSysList read FGroups;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property HeaderOffset:Int64 read FHeaderOffset write FHeaderOffset;</code>
+
| &nbsp;
+
|-
+
| <code>property HeaderSize:LongWord read FHeaderSize write FHeaderSize;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property FooterOffset:Int64 read FFooterOffset write FFooterOffset;</code>
+
| &nbsp;
+
|-
+
| <code>property FooterSize:LongWord read FFooterSize write FFooterSize;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property SparseOffset:Int64 read FSparseOffset write FSparseOffset;</code>
+
| &nbsp;
+
|-
+
| <code>property SparseSize:LongWord read FSparseSize write FSparseSize;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>function HasFooter:Boolean;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
+
'''Virtual disk VirtualBox extent'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVboxExtent = class(TVirtualDiskExtent)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(AImage:TVirtualDiskImage; ADelta,AParent:TVirtualDiskExtent);</code>
+
| [[TVirtualDiskVboxExtent|<code>TVirtualDiskVboxExtent = class(TVirtualDiskExtent)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FHeader:PVboxDiskHeader;</code>
+
| Header from Disk Extent
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FHeaderOffset:Int64;</code>
+
| Absolute byte offset of Header in file
+
|-
+
| <code>FHeaderSize:LongWord;</code>
+
| Size of Header in file
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>FTable:TVirtualDiskVboxTable;</code>
+
| VirtualBox images contain only one Table per Extent
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property Header:PVboxDiskHeader read FHeader;</code>
+
| &nbsp;
+
|-
+
| <code>property Table:TVirtualDiskVboxTable read FTable;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property HeaderOffset:Int64 read FHeaderOffset write FHeaderOffset;</code>
+
| &nbsp;
+
|-
+
| <code>property HeaderSize:LongWord read FHeaderSize write FHeaderSize;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
+
'''Virtual disk table'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskTable = class(TListObject)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
|colspan="2"|Note: Represents a Table of blocks within an Extent of a virtual disk
+
| [[TVirtualDiskTable|<code>TVirtualDiskTable = class(TListObject)</code>]]
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>constructor Create(AImage:TVirtualDiskImage; AExtent:TVirtualDiskExtent);</code>
+
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>FImage:TVirtualDiskImage;</code>
+
| &nbsp;
+
|-
+
| <code>FExtent:TVirtualDiskExtent;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FTableOffset:Int64;</code>
+
| Absolute byte offset of Table in file
+
|-
+
| <code>FTableSize:LongWord;</code>
+
| Size of Table data in file
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FStartSector:Int64;</code>
+
| First Sector represented by this Table
+
|-
+
| <code>FSectorCount:Int64;</code>
+
| Number of Sectors represented by this Table
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property Image:TVirtualDiskImage read FImage;</code>
+
| &nbsp;
+
|-
+
| <code>property Extent:TVirtualDiskExtent read FExtent;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property TableOffset:Int64 read FTableOffset write FTableOffset;</code>
+
| &nbsp;
+
|-
+
| <code>property TableSize:LongWord read FTableSize write FTableSize;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property StartSector:Int64 read FStartSector write FStartSector;</code>
+
| &nbsp;
+
|-
+
| <code>property SectorCount:Int64 read FSectorCount write FSectorCount;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VMware table'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVmwareTable = class(TVirtualDiskTable)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
| [[TVirtualDiskVmwareTable|<code>TVirtualDiskVmwareTable = class(TVirtualDiskTable)</code>]]
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VPC table'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVpcTable = class(TVirtualDiskTable)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(AImage:TVirtualDiskImage; AExtent:TVirtualDiskExtent);</code>
+
| [[TVirtualDiskVpcTable|<code>TVirtualDiskVpcTable = class(TVirtualDiskTable)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FData:Pointer;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property Data:Pointer read FData write FData;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VirtualBox table'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVboxTable = class(TVirtualDiskTable)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
| <code>constructor Create(AImage:TVirtualDiskImage; AExtent:TVirtualDiskExtent);</code>
+
| [[TVirtualDiskVboxTable|<code>TVirtualDiskVboxTable = class(TVirtualDiskTable)</code>]]
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FData:Pointer;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property Data:Pointer read FData write FData;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
+
'''Virtual disk block'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskBlock = class(TListObject)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
|colspan="2"|Note: Represents a Block bitmap showing data allocation within a virtual disk
+
| [[TVirtualDiskBlock|<code>TVirtualDiskBlock = class(TListObject)</code>]]
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>constructor Create(AImage:TVirtualDiskImage; ATable:TVirtualDiskTable);</code>
+
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>FImage:TVirtualDiskImage;</code>
+
| &nbsp;
+
|-
+
| <code>FTable:TVirtualDiskTable;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FDataOffset:Int64;</code>
+
| Absolute byte offset of Data in file (Where Applicable)
+
|-
+
| <code>FBlockOffset:Int64;</code>
+
| Absolute byte offset of Block in file
+
|-
+
| <code>FBlockSize:LongWord;</code>
+
| Size of Block bitmap in file
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FStartSector:Int64;</code>
+
| First Sector represented by this Block
+
|-
+
| <code>FSectorCount:Int64;</code>
+
| Number of Sectors represented by this Block
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property Image:TVirtualDiskImage read FImage;</code>
+
| &nbsp;
+
|-
+
| <code>property Table:TVirtualDiskTable read FTable;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property DataOffset:Int64 read FDataOffset write FDataOffset;</code>
+
| &nbsp;
+
|-
+
| <code>property BlockOffset:Int64 read FBlockOffset write FBlockOffset;</code>
+
| &nbsp;
+
|-
+
| <code>property BlockSize:LongWord read FBlockSize write FBlockSize;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property StartSector:Int64 read FStartSector write FStartSector;</code>
+
| &nbsp;
+
|-
+
| <code>property SectorCount:Int64 read FSectorCount write FSectorCount;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VMware block'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVmwareBlock = class(TVirtualDiskBlock)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
| [[TVirtualDiskVmwareBlock|<code>TVirtualDiskVmwareBlock = class(TVirtualDiskBlock)</code>]]
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VPC group'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVpcGroup = class(TListObject)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
|colspan="2"|Note: Represents a Group of bitmap Blocks
+
| [[TVirtualDiskVpcGroup|<code>TVirtualDiskVpcGroup = class(TListObject)</code>]]
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>constructor Create(AImage:TVirtualDiskImage; ATable:TVirtualDiskTable);</code>
+
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FGroupNo:LongWord;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
| <code>FBlocks:TFileSysList;</code>
+
| Block bitmap Blocks
+
|-
+
| <code>FBlockLocal:TMutexHandle;</code>
+
| Local Lock shared by all Block bitmap Blocks
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property GroupNo:LongWord read FGroupNo write FGroupNo;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property Blocks:TFileSysList read FBlocks;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
+
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 
+
'''Virtual disk VPC block'''
+
 
+
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
+
 
+
<code>TVirtualDiskVpcBlock = class(TVirtualDiskBlock)</code>
+
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
+
{| class="wikitable" style="font-size: 14px; background: white;"
+
 
|-
 
|-
|colspan="2"|Note: VirtualBox images do not contain a bitmap, allocation granularity is per block
+
| [[TVirtualDiskVpcBlock|<code>TVirtualDiskVpcBlock = class(TVirtualDiskBlock)</code>]]
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>constructor Create(AImage:TVirtualDiskImage; ATable:TVirtualDiskTable);</code>
+
| style="width: 50%;"|&nbsp;
+
|-
+
| <code>destructor Destroy; override;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
+
|-
+
| <code>FData:Pointer;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>FBlockNo:LongWord;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
+
|-
+
| <code>property Data:Pointer read FData write FData;</code>
+
| &nbsp;
+
|-
+
|colspan="2"|&nbsp;
+
|-
+
| <code>property BlockNo:LongWord read FBlockNo write FBlockNo;</code>
+
| &nbsp;
+
 
|-
 
|-
 
|}
 
|}
</div></div>
 
 
<br />
 
<br />
  

Latest revision as of 04:40, 29 October 2021

Return to Unit Reference


Description


Ultibo Virtual Disk Interface unit

Constants



[Expand]
Virtual disk specific constants VIRTUAL_*


[Expand]
Virtual flag virtualFlag*


[Expand]
Initramfs constants memoryInitramfs*


[Expand]
VMware constants vmware*


[Expand]
VMware disk type vmware*DiskType


[Expand]
VMware descriptor tag vmwareTag*


[Expand]
VMware create type vmwareCreateType_*


[Expand]
VMware access type vmwareAccessType_*


[Expand]
VMware extent type vmwareExtentType_*


[Expand]
VMware disk flag vmwareFlag*


[Expand]
VMware compression type vmwareCompression*


[Expand]
VPC constants vpc*


[Expand]
VPC disk type vpcDiskType*


[Expand]
VPC feature vpcFeature*


[Expand]
VPC creator host OS vpcCreator*


[Expand]
VPC platform code vpcPlatform*


[Expand]
VPC bitmap mask vpcBitmapMask*


[Expand]
VirtualBox constants vbox*


[Expand]
VirtualBox disk type vboxDiskType*


[Expand]
VirtualBox disk flag vboxDiskFlags*


Type definitions



ESX sparse extent header

[Expand]

PEsxSparseExtentHeader = ^TEsxSparseExtentHeader;

TEsxSparseExtentHeader = packed record

VMware sparse extent header

[Expand]

PVmwareSparseExtentHeader = ^TVmwareSparseExtentHeader;

TVmwareSparseExtentHeader = packed record

VPC dish geometry

[Expand]

PVpcDiskGeometry = ^TVpcDiskGeometry;

TVpcDiskGeometry = packed record

VPC parent locator

[Expand]

PVpcParentLocator = ^TVpcParentLocator;

TVpcParentLocator = packed record

VPC hard disk footer

[Expand]

PVpcHardDiskFooter = ^TVpcHardDiskFooter;

TVpcHardDiskFooter = packed record

VPC dynamic disk header

[Expand]

PVpcDynamicDiskHeader = ^TVpcDynamicDiskHeader;

TVpcDynamicDiskHeader = packed record

VirtualBox disk header

[Expand]

PVboxDiskHeader = ^TVboxDiskHeader;

TVboxDiskHeader = packed record


Class definitions



Virtual disk specific classes

TVirtualDiskController = class(TDiskController)
TVirtualDiskDevice = class(TDiskDevice)
TVirtualDiskPartition = class(TDiskPartition)
TVirtualDiskImage = class(TDiskImage)
TVirtualDiskMemoryImage = class(TVirtualDiskImage)
TVirtualDiskFileImage = class(TVirtualDiskImage)
TVirtualDiskDeviceImage = class(TVirtualDiskImage)
TVirtualDiskIsoImage = class(TVirtualDiskImage)
TVirtualDiskBochsImage = class(TVirtualDiskImage)
TVirtualDiskVmwareImage = class(TVirtualDiskImage)
TVirtualDiskVpcImage = class(TVirtualDiskImage)
TVirtualDiskVboxImage = class(TVirtualDiskImage)
TVirtualRecognizer = class(TRecognizer)
TVirtualDiskResizer = class(TDiskResizer)
TVirtualDiskCopier = class(TDiskCopier)
TVirtualDiskImager = class(TDiskImager)
TVirtualDiskExtent = class(TListObject)
TVirtualDiskVmwareExtent = class(TVirtualDiskExtent)
TVirtualDiskVpcExtent = class(TVirtualDiskExtent)
TVirtualDiskVboxExtent = class(TVirtualDiskExtent)
TVirtualDiskTable = class(TListObject)
TVirtualDiskVmwareTable = class(TVirtualDiskTable)
TVirtualDiskVpcTable = class(TVirtualDiskTable)
TVirtualDiskVboxTable = class(TVirtualDiskTable)
TVirtualDiskBlock = class(TListObject)
TVirtualDiskVmwareBlock = class(TVirtualDiskBlock)
TVirtualDiskVpcGroup = class(TListObject)
TVirtualDiskVpcBlock = class(TVirtualDiskBlock)


Public variables


None defined

Function declarations



Initialization functions

[Expand]
procedure VirtualInit;
Description: To be documented


[Expand]
procedure VirtualQuit;
Description: To be documented


Virtual disk helper functions

[Expand]
function VirtualDataToPointer(const AData; ASize:Integer; ASwap:Boolean):Pointer;
Description: Creates a pointer and copies data from a buffer


[Expand]
function VirtualPointerToData(APointer:Pointer; var AData; ASize:Integer; ASwap:Boolean):Boolean;
Description: Copies data to a buffer from supplied pointer


[Expand]
function VirtualDataToString(const AData; ASize:Integer; AUnicode:Boolean):String;
Description: Converts the supplied data to a string


[Expand]
function VirtualStringToData(const AString:String; var AData; ASize:Integer ;AUnicode:Boolean):Boolean;
Description: Converts the supplied string to data


Return to Unit Reference