path: root/src/Format/InPlace.h
diff options
authorMounir IDRASSI <>2023-06-04 16:25:55 +0200
committerMounir IDRASSI <>2023-06-04 16:25:55 +0200
commit22466535f1b9cbe1bd98363cfa98f7f796bc408a (patch)
tree7ee1c59af8e16b57953a86f8837fe465e418f60a /src/Format/InPlace.h
parent3c68349a39877c5420c727cd53143ab442963759 (diff)
Windows: Possible workaround for logarithmic slowdown for Encrypt-In-Place on large volumes (relates to #1063)
We replace absolute file pointer moving by relative moving with respect to current position. This was implemented as a workaround to address the performance issues related to in-place encryption. When using SetFilePointerEx() with FILE_BEGIN as the reference point, reaching the end of large drives during in-place encryption can cause significant slowdowns. By moving the file pointer relatively, these performance issues are mitigated.
Diffstat (limited to 'src/Format/InPlace.h')
1 files changed, 1 insertions, 0 deletions
diff --git a/src/Format/InPlace.h b/src/Format/InPlace.h
index 717a8ed3..f2d97bed 100644
--- a/src/Format/InPlace.h
+++ b/src/Format/InPlace.h
@@ -43,6 +43,7 @@ static int DismountFileSystem (HWND hwndDlg, HANDLE dev, int driveLetter, BOOL b
static int ConcealNTFS (HANDLE dev);
BOOL SaveNonSysInPlaceEncSettings (int delta, WipeAlgorithmId wipeAlgorithm, BOOL bDecrypting);
static void ExportProgressStats (__int64 bytesDone, __int64 totalSize);
+BOOL MoveFilePointer (HANDLE dev, LARGE_INTEGER offset);
int ZeroUnreadableSectors (HANDLE dev, LARGE_INTEGER startOffset, int64 size, int sectorSize, uint64 *zeroedSectorCount);
static int OpenBackupHeader (HANDLE dev, const wchar_t *devicePath, Password *password, int pkcs5, int pim, PCRYPTO_INFO *retCryptoInfo, CRYPTO_INFO *headerCryptoInfo, __int64 deviceSize);
BOOL MoveClustersBeforeThreshold (HANDLE volumeHandle, PWSTR volumeDevicePath, int64 clusterThreshold);