//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by Setup.rc // #define IDR_COMREG 10 #define IDR_LANG_AR 20 #define IDR_LANG_CS 21 #define IDR_LANG_DE 22 #define IDR_LANG_ES 23 #define IDR_LANG_FR 24 #define IDR_LANG_IT 25 #define IDR_LANG_JA 26 #define IDR_LANG_NL 27 #define IDR_LANG_PL 28 #define IDR_LANG_RO 29 #define IDR_LANG_RU 30 #define IDR_LANG_VI 31 #define IDR_LANG_ZHCN 32 #define IDR_LANG_ZHHK 33 #define IDD_INSTALL 101 #define IDD_INSTALL_OPTIONS_PAGE_DLG 102 #define IDD_UNINSTALL 103 #define IDI_SETUP 104 #define IDR_SETUP_RSRC_HEADER 105 #define IDD_EXTRACTION_OPTIONS_PAGE_DLG 106 #define IDB_SETUP_WIZARD 107 #define IDD_INTRO_PAGE_DLG 108 #define IDB_SETUP_WIZARD_BKG 109 #define IDD_INFO_PAGE_DLG 110 #define IDD_INSTL_DLG 111 #define IDD_WIZARD_MODE_PAGE_DLG 112 #define IDD_PROGRESS_PAGE_DLG 113 #define IDD_DONATIONS_PAGE_DLG 114 #define IDD_INSTALL_LANGUAGE 115 #define IDC_DESTINATION 1000 #define IDC_BOX_TITLE 1001 #define IDC_BROWSE 1002 #define IDC_BOX_INFO 1003 #define IDC_LICENSE 1004 #define IDC_BOX_HELP 1005 #define IDC_LICENSE_TEXT 1006 #define IDC_BOX_HELP2 1007 #define IDC_FILE_TYPE 1008 #define IDT_UNINSTALL_DIR 1009 #define IDC_PROG_GROUP 1010 #define IDC_SYSTEM_RESTORE 1011 #define IDC_DESKTOP_ICON 1012 #define IDC_ALL_USERS 1013 #define IDT_INSTALL_DESTINATION 1014 #define IDC_UNINSTALL 1015 #define IDC_PROGRESS_BAR 1016 #define IDC_LOG_WINDOW 1017 #define IDC_SETUP_WIZARD_BKG 1018 #define IDC_SETUP_WIZARD_GFX_AREA 1019 #define IDC_HR 1020 #define IDC_OPEN_CONTAINING_FOLDER 1021 #define IDC_AGREE 1022 #define IDC_HR_BOTTOM 1023 #define IDC_WIZARD_MODE_INSTALL 1024 #define IDC_WIZARD_MODE_EXTRACT_ONLY 1025 #define IDC_NEXT 1026 #define IDC_PREV 1027 #define IDT_EXTRACT_DESTINATION 1028 #define IDC_POS_BOX 1029 #define IDC_BITMAP_SETUP_WIZARD 1030 #define IDC_MAIN_CONTENT_CANVAS 1031 #define IDC_DONATE 1032 #define IDC_LANGUAGES_LIST 1033 #define IDC_SELECT_LANGUAGE_LABEL 1034 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 116 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1035 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif a href='/code/VeraCrypt/plain/src/Volume/Volume.h?h=VeraCrypt_1.24-Update3&id=70215e3682345243301d410fc0072f294006403c'>plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
 Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.

 Governed by the TrueCrypt License 3.0 the full text of which is contained in
 the file License.txt included in TrueCrypt binary and source code distribution
 packages.
*/

#ifndef TC_HEADER_Volume_Volume
#define TC_HEADER_Volume_Volume

#include "Platform/Platform.h"
#include "Platform/StringConverter.h"
#include "EncryptionAlgorithm.h"
#include "EncryptionMode.h"
#include "Keyfile.h"
#include "VolumePassword.h"
#include "VolumeException.h"
#include "VolumeLayout.h"

namespace VeraCrypt
{
	class VolumePath
	{
	public:
		VolumePath () { }
		VolumePath (const wstring &path) { Data = path; }
		VolumePath (const FilesystemPath &path) { Data = path; }

		bool operator== (const VolumePath &other) const { return Data == other.Data; }
		bool operator!= (const VolumePath &other) const { return Data != other.Data; }
		operator FilesystemPath () const { return FilesystemPath (Data); }
		operator string () const { return StringConverter::ToSingle (Data); }
		operator wstring () const { return Data; }

		bool IsDevice () const { return FilesystemPath (Data).IsBlockDevice() || FilesystemPath (Data).IsCharacterDevice(); }
		bool IsEmpty () const { return Data.empty(); }

	protected:
		wstring Data;
	};

	typedef list <VolumePath> VolumePathList;

	struct VolumeHostType
	{
		enum Enum
		{
			Unknown,
			File,
			Device
		};
	};

	struct VolumeProtection
	{
		enum Enum
		{
			None,
			ReadOnly,
			HiddenVolumeReadOnly
		};
	};

	class Volume
	{
	public:
		Volume ();
		virtual ~Volume ();

		void Close ();
		shared_ptr <EncryptionAlgorithm> GetEncryptionAlgorithm () const;
		shared_ptr <EncryptionMode> GetEncryptionMode () const;
		shared_ptr <File> GetFile () const { return VolumeFile; }
		shared_ptr <VolumeHeader> GetHeader () const { return Header; }
		uint64 GetHeaderCreationTime () const { return Header->GetHeaderCreationTime(); }
		uint64 GetHostSize () const { return VolumeHostSize; }
		shared_ptr <VolumeLayout> GetLayout () const { return Layout; }
		VolumePath GetPath () const { return VolumeFile->GetPath(); }
		VolumeProtection::Enum GetProtectionType () const { return Protection; }
		shared_ptr <Pkcs5Kdf> GetPkcs5Kdf () const { return Header->GetPkcs5Kdf(); }
		uint32 GetSaltSize () const { return Header->GetSaltSize(); }
		size_t GetSectorSize () const { return SectorSize; }
		uint64 GetSize () const { return VolumeDataSize; }
		uint64 GetTopWriteOffset () const { return TopWriteOffset; }
		uint64 GetTotalDataRead () const { return TotalDataRead; }
		uint64 GetTotalDataWritten () const { return TotalDataWritten; }
		VolumeType::Enum GetType () const { return Type; }
		bool GetTrueCryptMode() const { return TrueCryptMode; }
		uint64 GetVolumeCreationTime () const { return Header->GetVolumeCreationTime(); }
		bool IsHiddenVolumeProtectionTriggered () const { return HiddenVolumeProtectionTriggered; }
		bool IsInSystemEncryptionScope () const { return SystemEncryption; }
		void Open (const VolumePath &volumePath, bool preserveTimestamps, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection = VolumeProtection::None, shared_ptr <VolumePassword> protectionPassword = shared_ptr <VolumePassword> (), shared_ptr <Pkcs5Kdf> protectionKdf = shared_ptr <Pkcs5Kdf> (),shared_ptr <KeyfileList> protectionKeyfiles = shared_ptr <KeyfileList> (), bool sharedAccessAllowed = false, VolumeType::Enum volumeType = VolumeType::Unknown, bool useBackupHeaders = false, bool partitionInSystemEncryptionScope = false);
		void Open (shared_ptr <File> volumeFile, shared_ptr <VolumePassword> password, shared_ptr <Pkcs5Kdf> kdf, bool truecryptMode, shared_ptr <KeyfileList> keyfiles, VolumeProtection::Enum protection = VolumeProtection::None, shared_ptr <VolumePassword> protectionPassword = shared_ptr <VolumePassword> (), shared_ptr <Pkcs5Kdf> protectionKdf = shared_ptr <Pkcs5Kdf> (), shared_ptr <KeyfileList> protectionKeyfiles = shared_ptr <KeyfileList> (), VolumeType::Enum volumeType = VolumeType::Unknown, bool useBackupHeaders = false, bool partitionInSystemEncryptionScope = false);
		void ReadSectors (const BufferPtr &buffer, uint64 byteOffset);
		void ReEncryptHeader (bool backupHeader, const ConstBufferPtr &newSalt, const ConstBufferPtr &newHeaderKey, shared_ptr <Pkcs5Kdf> newPkcs5Kdf);
		void WriteSectors (const ConstBufferPtr &buffer, uint64 byteOffset);

	protected:
		void CheckProtectedRange (uint64 writeHostOffset, uint64 writeLength);
		void ValidateState () const;

		shared_ptr <EncryptionAlgorithm> EA;
		shared_ptr <VolumeHeader> Header;
		bool HiddenVolumeProtectionTriggered;
		shared_ptr <VolumeLayout> Layout;
		uint64 ProtectedRangeStart;
		uint64 ProtectedRangeEnd;
		VolumeProtection::Enum Protection;
		size_t SectorSize;
		bool SystemEncryption;
		VolumeType::Enum Type;
		shared_ptr <File> VolumeFile;
		uint64 VolumeHostSize;
		uint64 VolumeDataOffset; 
		uint64 VolumeDataSize;
		uint64 TopWriteOffset;
		uint64 TotalDataRead;
		uint64 TotalDataWritten;
		bool TrueCryptMode;

	private:
		Volume (const Volume &);
		Volume &operator= (const Volume &);
	};
}

#endif // TC_HEADER_Volume_Volume