VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Driver/Ntdriver.c
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2021-12-30 00:10:23 +0100
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2021-12-30 00:42:30 +0100
commitfac35ab08abc26d05e4b737d716f77ac794798d2 (patch)
tree75129baf6357d565c41e9cd3095287c43047e9cd /src/Driver/Ntdriver.c
parent7e20f65e68f12b09eee31fa0c2c7b18285921ca9 (diff)
downloadVeraCrypt-fac35ab08abc26d05e4b737d716f77ac794798d2.tar.gz
VeraCrypt-fac35ab08abc26d05e4b737d716f77ac794798d2.zip
Windows Driver: Better code for EncryptionFragmentSize variable handling
Diffstat (limited to 'src/Driver/Ntdriver.c')
-rw-r--r--src/Driver/Ntdriver.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/Driver/Ntdriver.c b/src/Driver/Ntdriver.c
index 50b66ab6..3c7b50dc 100644
--- a/src/Driver/Ntdriver.c
+++ b/src/Driver/Ntdriver.c
@@ -4801,76 +4801,77 @@ NTSTATUS ReadRegistryConfigFlags (BOOL driverEntry)
if (driverEntry && NT_SUCCESS (TCReadRegistryKey (&name, VC_ENCRYPTION_IO_REQUEST_COUNT, &data)))
{
if (data->Type == REG_DWORD)
EncryptionIoRequestCount = *(uint32 *) data->Data;
TCfree (data);
}
if (driverEntry && NT_SUCCESS (TCReadRegistryKey (&name, VC_ENCRYPTION_ITEM_COUNT, &data)))
{
if (data->Type == REG_DWORD)
EncryptionItemCount = *(uint32 *) data->Data;
TCfree (data);
}
if (driverEntry && NT_SUCCESS (TCReadRegistryKey (&name, VC_ENCRYPTION_FRAGMENT_SIZE, &data)))
{
if (data->Type == REG_DWORD)
EncryptionFragmentSize = *(uint32 *) data->Data;
TCfree (data);
}
if (driverEntry)
{
if (EncryptionIoRequestCount < TC_ENC_IO_QUEUE_PREALLOCATED_IO_REQUEST_COUNT)
EncryptionIoRequestCount = TC_ENC_IO_QUEUE_PREALLOCATED_IO_REQUEST_COUNT;
if (EncryptionItemCount == 0)
EncryptionItemCount = EncryptionIoRequestCount / 2;
else if (EncryptionItemCount >= EncryptionIoRequestCount)
EncryptionItemCount = EncryptionIoRequestCount - 1;
/* EncryptionFragmentSize value in registry is expressed in KiB */
+ EncryptionFragmentSize *= 1024;
if (EncryptionFragmentSize == 0)
- EncryptionFragmentSize = TC_ENC_IO_QUEUE_MAX_FRAGMENT_SIZE / 1024;
- else if (EncryptionFragmentSize > (8 * TC_ENC_IO_QUEUE_MAX_FRAGMENT_SIZE / 1024))
- EncryptionFragmentSize = 8 * TC_ENC_IO_QUEUE_MAX_FRAGMENT_SIZE / 1024;
+ EncryptionFragmentSize = TC_ENC_IO_QUEUE_MAX_FRAGMENT_SIZE;
+ else if (EncryptionFragmentSize > (8 * TC_ENC_IO_QUEUE_MAX_FRAGMENT_SIZE))
+ EncryptionFragmentSize = 8 * TC_ENC_IO_QUEUE_MAX_FRAGMENT_SIZE;
+
- EncryptionFragmentSize = EncryptionFragmentSize * 1024;
}
return status;
}
NTSTATUS WriteRegistryConfigFlags (uint32 flags)
{
UNICODE_STRING name;
RtlInitUnicodeString (&name, L"\\REGISTRY\\MACHINE\\SYSTEM\\CurrentControlSet\\Services\\veracrypt");
return TCWriteRegistryKey (&name, TC_DRIVER_CONFIG_REG_VALUE_NAME, REG_DWORD, &flags, sizeof (flags));
}
NTSTATUS GetDeviceSectorSize (PDEVICE_OBJECT deviceObject, ULONG *bytesPerSector)
{
NTSTATUS status;
DISK_GEOMETRY geometry;
status = SendDeviceIoControlRequest (deviceObject, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &geometry, sizeof (geometry));
if (!NT_SUCCESS (status))
return status;
*bytesPerSector = geometry.BytesPerSector;
return STATUS_SUCCESS;
}
NTSTATUS ZeroUnreadableSectors (PDEVICE_OBJECT deviceObject, LARGE_INTEGER startOffset, ULONG size, uint64 *zeroedSectorCount)
{
NTSTATUS status;
ULONG sectorSize;