VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Setup/ComSetup.rgs
blob: b8201c10e30e6587cef982a555895c4591484fa1 (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
HKCR
{
	ForceRemove VeraCrypt.1 = s 'VeraCrypt class'
	{
		CLSID = s '{FE8B3B95-C80C-41f7-830F-FBA271C26F7E}'
	}

	ForceRemove VeraCrypt = s 'VeraCrypt class'
	{
		CLSID = s '{FE8B3B95-C80C-41f7-830F-FBA271C26F7E}'
		CurVer = s 'VeraCrypt.1'
	}

	NoRemove CLSID
	{
		ForceRemove {FE8B3B95-C80C-41f7-830F-FBA271C26F7E} = s 'VeraCrypt class'
		{
			ProgID = s 'VeraCrypt.1'
			VersionIndependentProgID = s 'VeraCrypt'
			LocalServer32 = s '"%MAIN_MODULE%"'

			TypeLib = s '{9ACF6176-5FC4-4690-A025-B3306A50EB6A}'

			Elevation
            {
				val Enabled = d 1
				val IconReference = s '@%MAIN_MODULE%,-501'
            }

			val AppId = s '{FE8B3B95-C80C-41f7-830F-FBA271C26F7E}'
            val LocalizedString = s '@%MAIN_MODULE%,-110'
		}
	}

	NoRemove AppId
	{
		ForceRemove {FE8B3B95-C80C-41f7-830F-FBA271C26F7E} = s 'VeraCrypt class'
		{
			val AccessPermission = b 010004803000000040000000000000001400000002001c000100000000001400070000000101000000000005040000000102000000000005200000002002000001020000000000052000000020020000
		}

		ForceRemove VeraCrypt.exe
		{
			val AppId = s '{FE8B3B95-C80C-41f7-830F-FBA271C26F7E}'
		}
	}

	ForceRemove VeraCryptFormat.1 = s 'VeraCryptFormat class'
	{
		CLSID = s '{A96D3797-9F31-49f4-A0CE-9657392CF789}'
	}

	ForceRemove VeraCryptFormat = s 'VeraCryptFormat class'
	{
		CLSID = s '{A96D3797-9F31-49f4-A0CE-9657392CF789}'
		CurVer = s 'VeraCryptFormat.1'
	}

	NoRemove CLSID
	{
		ForceRemove {A96D3797-9F31-49f4-A0CE-9657392CF789} = s 'VeraCryptFormat class'
		{
			ProgID = s 'VeraCryptFormat.1'
			VersionIndependentProgID = s 'VeraCryptFormat'
			LocalServer32 = s '"%FORMAT_MODULE%"'

			TypeLib = s '{56327DDA-F1A7-4e13-B128-520D129BDEF6}'

			Elevation
            {
				val Enabled = d 1
				val IconReference = s '@%FORMAT_MODULE%,-501'
            }

			val AppId = s '{A96D3797-9F31-49f4-A0CE-9657392CF789}'
            val LocalizedString = s '@%FORMAT_MODULE%,-112'
		}
	}

	NoRemove AppId
	{
		ForceRemove {A96D3797-9F31-49f4-A0CE-9657392CF789} = s 'VeraCryptFormat class'
		{
			val AccessPermission = b 010004803000000040000000000000001400000002001c000100000000001400070000000101000000000005040000000102000000000005200000002002000001020000000000052000000020020000
		}

		ForceRemove 'VeraCrypt Format.exe'
		{
			val AppId = s '{A96D3797-9F31-49f4-A0CE-9657392CF789}'
		}
	}
}
an> ReadEncryptedSectors (uint16 destSegment, uint16 destOffset, byte drive, uint64 sector, uint16 sectorCount) { BiosResult result; bool decrypt = true; if (BootCryptoInfo->hiddenVolume) { if (ReadWritePartiallyCoversEncryptedArea (sector, sectorCount)) return BiosResultInvalidFunction; if (sector >= EncryptedVirtualPartition.StartSector && sector <= EncryptedVirtualPartition.EndSector) { // Remap the request to the hidden volume sector -= EncryptedVirtualPartition.StartSector; sector += HiddenVolumeStartSector; } else decrypt = false; } result = ReadSectors (destSegment, destOffset, drive, sector, sectorCount); if (result != BiosResultSuccess || !decrypt) return result; if (BootCryptoInfo->hiddenVolume) { // Convert sector number to data unit number of the hidden volume sector -= HiddenVolumeStartSector; sector += PimValueOrHiddenVolumeStartUnitNo; } if (drive == EncryptedVirtualPartition.Drive) { while (sectorCount-- > 0) { if (BootCryptoInfo->hiddenVolume || (sector >= EncryptedVirtualPartition.StartSector && sector <= EncryptedVirtualPartition.EndSector)) { AcquireSectorBuffer(); CopyMemory (destSegment, destOffset, SectorBuffer, TC_LB_SIZE); DecryptDataUnits (SectorBuffer, &sector, 1, BootCryptoInfo); CopyMemory (SectorBuffer, destSegment, destOffset, TC_LB_SIZE); ReleaseSectorBuffer(); } ++sector; destOffset += TC_LB_SIZE; } } return result; } BiosResult WriteEncryptedSectors (uint16 sourceSegment, uint16 sourceOffset, byte drive, uint64 sector, uint16 sectorCount) { BiosResult result = BiosResultSuccess; AcquireSectorBuffer(); uint64 dataUnitNo; uint64 writeOffset; dataUnitNo = sector; writeOffset.HighPart = 0; writeOffset.LowPart = 0; if (BootCryptoInfo->hiddenVolume) { if (ReadWritePartiallyCoversEncryptedArea (sector, sectorCount)) return BiosResultInvalidFunction; // Remap the request to the hidden volume writeOffset = HiddenVolumeStartSector; writeOffset -= EncryptedVirtualPartition.StartSector; dataUnitNo -= EncryptedVirtualPartition.StartSector; dataUnitNo += PimValueOrHiddenVolumeStartUnitNo; } while (sectorCount-- > 0) { CopyMemory (sourceSegment, sourceOffset, SectorBuffer, TC_LB_SIZE); if (drive == EncryptedVirtualPartition.Drive && sector >= EncryptedVirtualPartition.StartSector && sector <= EncryptedVirtualPartition.EndSector) { EncryptDataUnits (SectorBuffer, &dataUnitNo, 1, BootCryptoInfo); } result = WriteSectors (SectorBuffer, drive, sector + writeOffset, 1); if (result != BiosResultSuccess) break; ++sector; ++dataUnitNo; sourceOffset += TC_LB_SIZE; } ReleaseSectorBuffer(); return result; } static bool ReadWritePartiallyCoversEncryptedArea (const uint64 &sector, uint16 sectorCount) { uint64 readWriteEnd = sector + --sectorCount; return ((sector < EncryptedVirtualPartition.StartSector && readWriteEnd >= EncryptedVirtualPartition.StartSector) || (sector >= EncryptedVirtualPartition.StartSector && readWriteEnd > EncryptedVirtualPartition.EndSector)); }