mirror of
https://github.com/Thealexbarney/LibHac.git
synced 2024-11-14 10:49:41 +01:00
146 lines
No EOL
6.9 KiB
C#
146 lines
No EOL
6.9 KiB
C#
//
|
|
// Copyright (c) 2008-2011, Kenneth Bell
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the "Software"),
|
|
// to deal in the Software without restriction, including without limitation
|
|
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
// and/or sell copies of the Software, and to permit persons to whom the
|
|
// Software is furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
// DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
using System;
|
|
using System.Text;
|
|
using DiscUtils.Streams;
|
|
|
|
namespace DiscUtils.Partitions
|
|
{
|
|
internal class GptEntry : IComparable<GptEntry>
|
|
{
|
|
public ulong Attributes;
|
|
public long FirstUsedLogicalBlock;
|
|
public Guid Identity;
|
|
public long LastUsedLogicalBlock;
|
|
public string Name;
|
|
public Guid PartitionType;
|
|
|
|
public GptEntry()
|
|
{
|
|
PartitionType = Guid.Empty;
|
|
Identity = Guid.Empty;
|
|
Name = string.Empty;
|
|
}
|
|
|
|
public string FriendlyPartitionType
|
|
{
|
|
get
|
|
{
|
|
switch (PartitionType.ToString().ToUpperInvariant())
|
|
{
|
|
case "00000000-0000-0000-0000-000000000000":
|
|
return "Unused";
|
|
case "024DEE41-33E7-11D3-9D69-0008C781F39F":
|
|
return "MBR Partition Scheme";
|
|
case "C12A7328-F81F-11D2-BA4B-00A0C93EC93B":
|
|
return "EFI System";
|
|
case "21686148-6449-6E6F-744E-656564454649":
|
|
return "BIOS Boot";
|
|
case "E3C9E316-0B5C-4DB8-817D-F92DF00215AE":
|
|
return "Microsoft Reserved";
|
|
case "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7":
|
|
return "Windows Basic Data";
|
|
case "5808C8AA-7E8F-42E0-85D2-E1E90434CFB3":
|
|
return "Windows Logical Disk Manager Metadata";
|
|
case "AF9B60A0-1431-4F62-BC68-3311714A69AD":
|
|
return "Windows Logical Disk Manager Data";
|
|
case "75894C1E-3AEB-11D3-B7C1-7B03A0000000":
|
|
return "HP-UX Data";
|
|
case "E2A1E728-32E3-11D6-A682-7B03A0000000":
|
|
return "HP-UX Service";
|
|
case "A19D880F-05FC-4D3B-A006-743F0F84911E":
|
|
return "Linux RAID";
|
|
case "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F":
|
|
return "Linux Swap";
|
|
case "E6D6D379-F507-44C2-A23C-238F2A3DF928":
|
|
return "Linux Logical Volume Manager";
|
|
case "83BD6B9D-7F41-11DC-BE0B-001560B84F0F":
|
|
return "FreeBSD Boot";
|
|
case "516E7CB4-6ECF-11D6-8FF8-00022D09712B":
|
|
return "FreeBSD Data";
|
|
case "516E7CB5-6ECF-11D6-8FF8-00022D09712B":
|
|
return "FreeBSD Swap";
|
|
case "516E7CB6-6ECF-11D6-8FF8-00022D09712B":
|
|
return "FreeBSD Unix File System";
|
|
case "516E7CB8-6ECF-11D6-8FF8-00022D09712B":
|
|
return "FreeBSD Vinum volume manager";
|
|
case "516E7CBA-6ECF-11D6-8FF8-00022D09712B":
|
|
return "FreeBSD ZFS";
|
|
case "48465300-0000-11AA-AA11-00306543ECAC":
|
|
return "Mac OS X HFS+";
|
|
case "55465300-0000-11AA-AA11-00306543ECAC":
|
|
return "Mac OS X UFS";
|
|
case "6A898CC3-1DD2-11B2-99A6-080020736631":
|
|
return "Mac OS X ZFS";
|
|
case "52414944-0000-11AA-AA11-00306543ECAC":
|
|
return "Mac OS X RAID";
|
|
case "52414944-5F4F-11AA-AA11-00306543ECAC":
|
|
return "Mac OS X RAID, Offline";
|
|
case "426F6F74-0000-11AA-AA11-00306543ECAC":
|
|
return "Mac OS X Boot";
|
|
case "4C616265-6C00-11AA-AA11-00306543ECAC":
|
|
return "Mac OS X Label";
|
|
case "49F48D32-B10E-11DC-B99B-0019D1879648":
|
|
return "NetBSD Swap";
|
|
case "49F48D5A-B10E-11DC-B99B-0019D1879648":
|
|
return "NetBSD Fast File System";
|
|
case "49F48D82-B10E-11DC-B99B-0019D1879648":
|
|
return "NetBSD Log-Structed File System";
|
|
case "49F48DAA-B10E-11DC-B99B-0019D1879648":
|
|
return "NetBSD RAID";
|
|
case "2DB519C4-B10F-11DC-B99B-0019D1879648":
|
|
return "NetBSD Concatenated";
|
|
case "2DB519EC-B10F-11DC-B99B-0019D1879648":
|
|
return "NetBSD Encrypted";
|
|
default:
|
|
return "Unknown";
|
|
}
|
|
}
|
|
}
|
|
|
|
public int CompareTo(GptEntry other)
|
|
{
|
|
return FirstUsedLogicalBlock.CompareTo(other.FirstUsedLogicalBlock);
|
|
}
|
|
|
|
public void ReadFrom(byte[] buffer, int offset)
|
|
{
|
|
PartitionType = EndianUtilities.ToGuidLittleEndian(buffer, offset + 0);
|
|
Identity = EndianUtilities.ToGuidLittleEndian(buffer, offset + 16);
|
|
FirstUsedLogicalBlock = EndianUtilities.ToInt64LittleEndian(buffer, offset + 32);
|
|
LastUsedLogicalBlock = EndianUtilities.ToInt64LittleEndian(buffer, offset + 40);
|
|
Attributes = EndianUtilities.ToUInt64LittleEndian(buffer, offset + 48);
|
|
Name = Encoding.Unicode.GetString(buffer, offset + 56, 72).TrimEnd('\0');
|
|
}
|
|
|
|
public void WriteTo(byte[] buffer, int offset)
|
|
{
|
|
EndianUtilities.WriteBytesLittleEndian(PartitionType, buffer, offset + 0);
|
|
EndianUtilities.WriteBytesLittleEndian(Identity, buffer, offset + 16);
|
|
EndianUtilities.WriteBytesLittleEndian(FirstUsedLogicalBlock, buffer, offset + 32);
|
|
EndianUtilities.WriteBytesLittleEndian(LastUsedLogicalBlock, buffer, offset + 40);
|
|
EndianUtilities.WriteBytesLittleEndian(Attributes, buffer, offset + 48);
|
|
Encoding.Unicode.GetBytes(Name + new string('\0', 36), 0, 36, buffer, offset + 56);
|
|
}
|
|
}
|
|
} |