diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2021-12-30 00:10:23 +0100 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2021-12-30 00:42:30 +0100 |
commit | fac35ab08abc26d05e4b737d716f77ac794798d2 (patch) | |
tree | 75129baf6357d565c41e9cd3095287c43047e9cd /src/Driver/Ntdriver.c | |
parent | 7e20f65e68f12b09eee31fa0c2c7b18285921ca9 (diff) | |
download | VeraCrypt-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.c | 9 |
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; |