/* Read Volume and File Structure on an UDF file system. */
EFI_STATUS ReadVolumeFileStructure(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, OUT UDF_VOLUME_INFO *Volume)
/* Read Volume and File Structure on an UDF file system. */
EFI_STATUS ReadVolumeFileStructure(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, OUT UDF_VOLUME_INFO *Volume)
{
  EFI_STATUS                            Status;
  UDF_ANCHOR_VOLUME_DESCRIPTOR_POINTER  AnchorPoint;
  UDF_EXTENT_AD                         *ExtentAd;
  Status = FindAnchorVolumeDescriptorPointer (
             BlockIo,
             DiskIo,
             &AnchorPoint
             );
  if (EFI_ERROR (Status)) {
    return Status;
  }
  ExtentAd = &AnchorPoint.MainVolumeDescriptorSequenceExtent;
  Volume->MainVdsStartLocation = (UINT64)ExtentAd->ExtentLocation;
  Status = StartMainVolumeDescriptorSequence (
             BlockIo,
             DiskIo,
             &AnchorPoint,
             Volume
             );
  if (EFI_ERROR (Status)) {
    return Status;
  }
  return Status;
}