gptpart.h revision 699941e25a1fcf0beec124203747c8ed20842989
1a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// 2a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// C++ Interface: gptpart 3a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// 4a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// Description: Class to implement a single GPT partition 5a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// 6a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// 7a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// Author: Rod Smith <rodsmith@rodsbooks.com>, (C) 2009 8a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// 9a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// Copyright: See COPYING file that comes with this distribution 10a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// 11a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs// 12978041ca613dcb881763b36cf53639d924e52a56srs// This program is copyright (c) 2009 by Roderick W. Smith. It is distributed 13978041ca613dcb881763b36cf53639d924e52a56srs// under the terms of the GNU GPL version 2, as detailed in the COPYING file. 14a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs 15a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs#ifndef __GPTPART_H 16a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs#define __GPTPART_H 17a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs 18a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs#include <stdint.h> 19546a9c7c369df465021feecb20f6a8f81b6df6bcsrs#include <string> 20a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs#include <sys/types.h> 21a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs#include "support.h" 22a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs#include "parttypes.h" 236699b01eda84d24bfaf80ad725304fef2b0e1b2asrs#include "guid.h" 240873e9d0e9345a2c4418b4718db525c9f1111c83srs#include "attributes.h" 25a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs 26a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrsusing namespace std; 27a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs 28978041ca613dcb881763b36cf53639d924e52a56srs/**************************************** 29978041ca613dcb881763b36cf53639d924e52a56srs * * 30978041ca613dcb881763b36cf53639d924e52a56srs * GPTPart class and related structures * 31978041ca613dcb881763b36cf53639d924e52a56srs * * 32978041ca613dcb881763b36cf53639d924e52a56srs ****************************************/ 33a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs 34a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrsclass GPTPart { 35a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs protected: 36ba00fed2efd6c0cba60da9afb0ce3dff84fc69f9srs // Caution: The non-static data in GPTPart is precisely the right size 37a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs // to enable easy loading of the data directly from disk. If any 38a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs // non-static variables are added to the below, the data size will 39a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs // change and the program will stop working. This can be corrected by 40a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs // adjusting the data-load operation in GPTData::LoadMainTable() and 41ba00fed2efd6c0cba60da9afb0ce3dff84fc69f9srs // GPTData::LoadSecondTableAsMain() and then removing the GPTPart 42ba00fed2efd6c0cba60da9afb0ce3dff84fc69f9srs // size check in SizesOK() (in gpt.cc file). 436699b01eda84d24bfaf80ad725304fef2b0e1b2asrs PartType partitionType; 446699b01eda84d24bfaf80ad725304fef2b0e1b2asrs GUIDData uniqueGUID; 45a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs uint64_t firstLBA; 46a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs uint64_t lastLBA; 470873e9d0e9345a2c4418b4718db525c9f1111c83srs Attributes attributes; 48a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs unsigned char name[NAME_SIZE]; 49a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs public: 50a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs GPTPart(void); 51a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs ~GPTPart(void); 52a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs 53a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs // Simple data retrieval: 546699b01eda84d24bfaf80ad725304fef2b0e1b2asrs PartType & GetType(void) {return partitionType;} 55bf8950cad0285ee6ab8a896e8d0a30c5fb62c7afsrs uint16_t GetHexType(void) const; 566699b01eda84d24bfaf80ad725304fef2b0e1b2asrs string GetTypeName(void); 575a6085310b7f8fe1c35e56bcab7de161808b488dsrs UnicodeString GetUTypeName(void); 585a081757ea2e32a491349544fea92826ccf739f6srs const GUIDData GetUniqueGUID(void) const {return uniqueGUID;} 595a081757ea2e32a491349544fea92826ccf739f6srs uint64_t GetFirstLBA(void) const {return firstLBA;} 605a081757ea2e32a491349544fea92826ccf739f6srs uint64_t GetLastLBA(void) const {return lastLBA;} 61bf8950cad0285ee6ab8a896e8d0a30c5fb62c7afsrs uint64_t GetLengthLBA(void) const; 620873e9d0e9345a2c4418b4718db525c9f1111c83srs Attributes GetAttributes(void) {return attributes;} 630873e9d0e9345a2c4418b4718db525c9f1111c83srs void ShowAttributes(uint32_t partNum) {attributes.ShowAttributes(partNum);} 645a6085310b7f8fe1c35e56bcab7de161808b488dsrs UnicodeString GetDescription(void); 6508bb0da07953af605b4918e268272de15ac151aasrs int IsUsed(void); 66a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs 67a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs // Simple data assignment: 686699b01eda84d24bfaf80ad725304fef2b0e1b2asrs void SetType(PartType t); 696699b01eda84d24bfaf80ad725304fef2b0e1b2asrs void SetType(uint16_t hex) {partitionType = hex;} 706699b01eda84d24bfaf80ad725304fef2b0e1b2asrs void SetUniqueGUID(GUIDData u) {uniqueGUID = u;} 716699b01eda84d24bfaf80ad725304fef2b0e1b2asrs void RandomizeUniqueGUID(void) {uniqueGUID.Randomize();} 72a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs void SetFirstLBA(uint64_t f) {firstLBA = f;} 73a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs void SetLastLBA(uint64_t l) {lastLBA = l;} 74a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs void SetAttributes(uint64_t a) {attributes = a;} 750873e9d0e9345a2c4418b4718db525c9f1111c83srs void SetAttributes(void) {attributes.ChangeAttributes();} 76699941e25a1fcf0beec124203747c8ed20842989srs void SetName(const string & theName); 77699941e25a1fcf0beec124203747c8ed20842989srs#ifndef _WIN32 78699941e25a1fcf0beec124203747c8ed20842989srs void SetName(const UnicodeString & theName); 79699941e25a1fcf0beec124203747c8ed20842989srs#endif 806699b01eda84d24bfaf80ad725304fef2b0e1b2asrs void SetDefaultDescription(void); 81a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs 82a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs // Additional functions 83a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs GPTPart & operator=(const GPTPart & orig); 849a46b042c57144c26a67781d335e6ba4128382d2srs bool operator<(const GPTPart &other) const; 85978041ca613dcb881763b36cf53639d924e52a56srs void ShowSummary(int partNum, uint32_t blockSize); // display summary information (1-line) 86a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs void ShowDetails(uint32_t blockSize); // display detailed information (multi-line) 87a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs void BlankPartition(void); // empty partition of data 880a6973119c9e9984ad47a6da3231e8d16f996c5csrs int DoTheyOverlap(const GPTPart & other); // returns 1 if there's overlap 89a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs void ReversePartBytes(void); // reverse byte order of all integer fields 90a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs 91a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs // Functions requiring user interaction 92a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs void ChangeType(void); // Change the type code 93a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs}; // struct GPTPart 94a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs 95a0eb11a64b4a5b78caff58f804a5fb78ddf3a5dfsrs#endif 96