private IEnumerable <CompletionPort> ReadDiskGeometryAsync(AsyncMachine <DiskGeometry> machine, VhdPropertyAttribute attribute)
{
long offset = GetFooterOffset() + attribute.Offset;
var attributeHelper = new AttributeHelper <DiskGeometry>();
var diskGeometry = new DiskGeometry();
dataReader.BeginReadInt16(offset + attributeHelper.GetAttribute(() => diskGeometry.Cylinder).Offset, machine.CompletionCallback, null);
yield return(CompletionPort.SingleOperation);
diskGeometry.Cylinder = dataReader.EndReadInt16(machine.CompletionResult);
dataReader.BeginReadByte(offset + attributeHelper.GetAttribute(() => diskGeometry.Heads).Offset, machine.CompletionCallback, null);
yield return(CompletionPort.SingleOperation);
diskGeometry.Heads = dataReader.EndReadByte(machine.CompletionResult);
dataReader.BeginReadByte(offset + attributeHelper.GetAttribute(() => diskGeometry.Sectors).Offset, machine.CompletionCallback, null);
yield return(CompletionPort.SingleOperation);
diskGeometry.Sectors = dataReader.EndReadByte(machine.CompletionResult);
machine.ParameterValue = diskGeometry;
}