Annotation of truecrypt/common/bootencryption.h, revision 1.1

1.1     ! root        1: /*
        !             2:  Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
        !             3: 
        !             4:  Governed by the TrueCrypt License 2.4 the full text of which is contained
        !             5:  in the file License.txt included in TrueCrypt binary and source code
        !             6:  distribution packages.
        !             7: */
        !             8: 
        !             9: #ifndef TC_HEADER_Mount_BootEncryption
        !            10: #define TC_HEADER_Mount_BootEncryption
        !            11: 
        !            12: #include "Tcdefs.h"
        !            13: #include "Dlgcode.h"
        !            14: #include "Platform/PlatformBase.h"
        !            15: 
        !            16: using namespace std;
        !            17: 
        !            18: namespace TrueCrypt
        !            19: {
        !            20:        struct Exception
        !            21:        {
        !            22:                virtual void Show (HWND parent) = 0;
        !            23:        };
        !            24: 
        !            25:        struct SystemException : public Exception
        !            26:        {
        !            27:                SystemException () : ErrorCode (GetLastError()) { }
        !            28: 
        !            29:                void Show (HWND parent)
        !            30:                {
        !            31:                        SetLastError (ErrorCode);
        !            32:                        handleWin32Error (parent);
        !            33:                }
        !            34: 
        !            35:                DWORD ErrorCode;
        !            36:        };
        !            37: 
        !            38:        struct ErrorException : public Exception
        !            39:        {
        !            40:                ErrorException (char *langId) : ErrLangId (langId) { }
        !            41: 
        !            42:                void Show (HWND parent)
        !            43:                {
        !            44:                        ::Error (ErrLangId);
        !            45:                }
        !            46: 
        !            47:                char *ErrLangId;
        !            48:        };
        !            49: 
        !            50:        struct ParameterIncorrect : public Exception
        !            51:        {
        !            52:                ParameterIncorrect (const char *srcPos) : SrcPos (srcPos) { }
        !            53: 
        !            54:                void Show (HWND parent)
        !            55:                {
        !            56:                        string msgBody = "Parameter incorrect.\n\n\n(If you report a bug in connection with this, please include the following technical information in the bug report:\n" + string (SrcPos) + ")";
        !            57:                        MessageBox (parent, msgBody.c_str(), "TrueCrypt", MB_ICONERROR | MB_SETFOREGROUND | MB_TOPMOST);
        !            58:                }
        !            59: 
        !            60:                const char *SrcPos;
        !            61:        };
        !            62: 
        !            63:        struct UserAbort : public Exception
        !            64:        {
        !            65:                UserAbort (const char *srcPos) { }
        !            66:                void Show (HWND parent) { }
        !            67:        };
        !            68: 
        !            69: #define throw_sys_if(condition) do { if (condition) throw SystemException(); } while (false)
        !            70: 
        !            71: 
        !            72:        class File
        !            73:        {
        !            74:        public:
        !            75:                File () : FileOpen (false) { }
        !            76:                File (string path, bool readOnly = false, bool create = false);
        !            77:                ~File () { Close(); }
        !            78: 
        !            79:                void Close ();
        !            80:                DWORD Read (byte *buffer, DWORD size);
        !            81:                void Write (byte *buffer, DWORD size);
        !            82:                void SeekAt (int64 position);
        !            83: 
        !            84:        protected:
        !            85:                bool Elevated;
        !            86:                bool FileOpen;
        !            87:                uint64 FilePointerPosition;
        !            88:                HANDLE Handle;
        !            89:                bool IsDevice;
        !            90:                string Path;
        !            91:        };
        !            92: 
        !            93: 
        !            94:        class Device : public File
        !            95:        {
        !            96:        public:
        !            97:                Device (string path, bool readOnly = false);
        !            98:        };
        !            99: 
        !           100: 
        !           101:        class Buffer
        !           102:        {
        !           103:        public:
        !           104:                Buffer (size_t size) : DataSize (size)
        !           105:                {
        !           106:                        DataPtr = new byte[size];
        !           107:                        if (!DataPtr)
        !           108:                                throw bad_alloc();
        !           109:                }
        !           110: 
        !           111:                ~Buffer () { delete DataPtr; }
        !           112:                byte *Ptr () const { return DataPtr; }
        !           113:                size_t Size () const { return DataSize; }
        !           114: 
        !           115:        protected:
        !           116:                byte *DataPtr;
        !           117:                size_t DataSize;
        !           118:        };
        !           119: 
        !           120: 
        !           121:        struct Partition
        !           122:        {
        !           123:                string DevicePath;
        !           124:                PARTITION_INFORMATION Info;
        !           125:                string MountPoint;
        !           126:                int Number;
        !           127:                BOOL IsGPT;
        !           128:        };
        !           129: 
        !           130:        typedef list <Partition> PartitionList;
        !           131: 
        !           132: 
        !           133:        struct SystemDriveConfiguration
        !           134:        {
        !           135:                string DevicePath;
        !           136:                int DriveNumber;
        !           137:                Partition DrivePartition;
        !           138:                int64 InitialUnallocatedSpace;
        !           139:                PartitionList Partitions;
        !           140:                Partition SystemPartition;
        !           141:                int64 TotalUnallocatedSpace;
        !           142:                bool SystemLoaderPresent;
        !           143:        };
        !           144: 
        !           145:        class BootEncryption
        !           146:        {
        !           147:        public:
        !           148:                BootEncryption (HWND parent)
        !           149:                        : DriveConfigValid (false),
        !           150:                        ParentWindow (parent),
        !           151:                        RealSystemDriveSizeValid (false),
        !           152:                        RescueIsoImage (nullptr),
        !           153:                        RescueVolumeHeaderValid (false),
        !           154:                        VolumeHeaderValid (false)
        !           155:                {
        !           156:                }
        !           157: 
        !           158:                ~BootEncryption ();
        !           159: 
        !           160:                void AbortSetup ();
        !           161:                void AbortSetupWait ();
        !           162:                void CallDriver (DWORD ioctl, void *input = nullptr, DWORD inputSize = 0, void *output = nullptr, DWORD outputSize = 0);
        !           163:                int ChangePassword (Password *oldPassword, Password *newPassword, int pkcs5);
        !           164:                void CheckEncryptionSetupResult ();
        !           165:                void CheckRequirements ();
        !           166:                void CreateRescueIsoImage (bool initialSetup, const string &isoImagePath);
        !           167:                void Deinstall ();
        !           168:                DWORD GetDriverServiceStartType ();
        !           169:                uint16 GetInstalledBootLoaderVersion ();
        !           170:                BootEncryptionStatus GetStatus ();
        !           171:                void GetVolumeProperties (VOLUME_PROPERTIES_STRUCT *properties);
        !           172:                SystemDriveConfiguration GetSystemDriveConfiguration ();
        !           173:                void Install ();
        !           174:                void PrepareInstallation (bool systemPartitionOnly, Password &password, int ea, int mode, int pkcs5, const string &rescueIsoImagePath);
        !           175:                void ProbeRealSystemDriveSize ();
        !           176:                void RegisterFilterDriver (bool registerDriver);
        !           177:                bool RestartComputer (void);
        !           178:                void SetDriverServiceStartType (DWORD startType);
        !           179:                void StartDecryption ();
        !           180:                void StartEncryption (WipeAlgorithmId wipeAlgorithm);
        !           181:                bool SystemPartitionCoversWholeDrive ();
        !           182:                bool VerifyRescueDisk ();
        !           183: 
        !           184:        protected:
        !           185:                static const uint32 RescueIsoImageSize = 1835008; // Size of ISO9660 image with bootable emulated 1.44MB floppy disk image
        !           186: 
        !           187:                void BackupSystemLoader ();
        !           188:                void CreateVolumeHeader (uint64 volumeSize, uint64 encryptedAreaStart, Password *password, int ea, int mode, int pkcs5);
        !           189:                string GetSystemLoaderBackupPath ();
        !           190:                DISK_GEOMETRY GetDriveGeometry (int driveNumber);
        !           191:                PartitionList GetDrivePartitions (int driveNumber);
        !           192:                string GetWindowsDirectory ();
        !           193:                void InstallBootLoader ();
        !           194:                void RestoreSystemLoader ();
        !           195:                void InstallVolumeHeader ();
        !           196:                void UpdateSystemDriveConfiguration ();
        !           197: 
        !           198:                HWND ParentWindow;
        !           199:                SystemDriveConfiguration DriveConfig;
        !           200:                byte *RescueIsoImage;
        !           201:                byte RescueVolumeHeader[HEADER_SIZE];
        !           202:                byte VolumeHeader[HEADER_SIZE];
        !           203:                bool DriveConfigValid;
        !           204:                bool RealSystemDriveSizeValid;
        !           205:                bool RescueVolumeHeaderValid;
        !           206:                bool VolumeHeaderValid;
        !           207:        };
        !           208: }
        !           209: 
        !           210: #define TC_ABORT_TRANSFORM_WAIT_INTERVAL       10
        !           211: 
        !           212: #define TC_SYS_BOOT_LOADER_BACKUP_NAME "Original System Loader.bak"
        !           213: 
        !           214: #endif // TC_HEADER_Mount_BootEncryption

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.