From 9f92aa63177666e6e6b75602f628eac10c835f72 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Fri, 16 Oct 2026 18:06:30 +0900 Subject: [PATCH] Windows: remove unused header finalization work Header reads have performed synchronous cleanup since 9dc24ba7. Remove the unused queue operation and obsolete event-reset macros. --- src/Common/EncryptionThreadPool.c | 80 ------------------------------- src/Common/EncryptionThreadPool.h | 4 +- 2 files changed, 1 insertion(+), 83 deletions(-) diff --git a/src/Common/EncryptionThreadPool.c b/src/Common/EncryptionThreadPool.c index 51f34cbf..073305db 100644 --- a/src/Common/EncryptionThreadPool.c +++ b/src/Common/EncryptionThreadPool.c @@ -32,7 +32,6 @@ static volatile int ThreadQueueSize = TC_ENC_THREAD_POOL_LEGACY_QUEUE_SIZE; #define TC_THREAD_PROC VOID #define TC_SET_EVENT(EVENT) KeSetEvent (&EVENT, IO_DISK_INCREMENT, FALSE) -#define TC_CLEAR_EVENT(EVENT) KeClearEvent (&EVENT) #define TC_MUTEX FAST_MUTEX #define TC_ACQUIRE_MUTEX(MUTEX) ExAcquireFastMutex (MUTEX) @@ -44,7 +43,6 @@ static volatile int ThreadQueueSize = TC_ENC_THREAD_POOL_LEGACY_QUEUE_SIZE; #define TC_THREAD_PROC unsigned __stdcall #define TC_SET_EVENT(EVENT) SetEvent (EVENT) -#define TC_CLEAR_EVENT(EVENT) ResetEvent (EVENT) #define TC_MUTEX HANDLE #define TC_ACQUIRE_MUTEX(MUTEX) WaitForSingleObject (*(MUTEX), INFINITE) @@ -110,18 +108,6 @@ typedef struct EncryptionThreadPoolWorkItemStruct unsigned char *Salt; LONG volatile *pAbortKeyDerivation; } KeyDerivation; - - struct - { - TC_EVENT *KeyDerivationCompletedEvent; - TC_EVENT *NoOutstandingWorkItemEvent; - LONG *outstandingWorkItemCount; - void* keyInfoBuffer; - int keyInfoBufferSize; - void* keyDerivationWorkItems; - int keyDerivationWorkItemsSize; - - } ReadVolumeHeaderFinalization; }; } EncryptionThreadPoolWorkItem; @@ -300,37 +286,6 @@ static TC_THREAD_PROC EncryptionThreadProc (void *threadArg) continue; } - case ReadVolumeHeaderFinalizationWork: - TC_WAIT_EVENT (*(workItem->ReadVolumeHeaderFinalization.NoOutstandingWorkItemEvent)); - - if (workItem->ReadVolumeHeaderFinalization.keyDerivationWorkItems) - { - burn (workItem->ReadVolumeHeaderFinalization.keyDerivationWorkItems, workItem->ReadVolumeHeaderFinalization.keyDerivationWorkItemsSize); -#if !defined(DEVICE_DRIVER) - VirtualUnlock (workItem->ReadVolumeHeaderFinalization.keyDerivationWorkItems, workItem->ReadVolumeHeaderFinalization.keyDerivationWorkItemsSize); -#endif - TCfree (workItem->ReadVolumeHeaderFinalization.keyDerivationWorkItems); - } - - if (workItem->ReadVolumeHeaderFinalization.keyInfoBuffer) - { - burn (workItem->ReadVolumeHeaderFinalization.keyInfoBuffer, workItem->ReadVolumeHeaderFinalization.keyInfoBufferSize); -#if !defined(DEVICE_DRIVER) - VirtualUnlock (workItem->ReadVolumeHeaderFinalization.keyInfoBuffer, workItem->ReadVolumeHeaderFinalization.keyInfoBufferSize); -#endif - TCfree (workItem->ReadVolumeHeaderFinalization.keyInfoBuffer); - } - -#if !defined(DEVICE_DRIVER) - CloseHandle (*(workItem->ReadVolumeHeaderFinalization.KeyDerivationCompletedEvent)); - CloseHandle (*(workItem->ReadVolumeHeaderFinalization.NoOutstandingWorkItemEvent)); -#endif - TCfree (workItem->ReadVolumeHeaderFinalization.KeyDerivationCompletedEvent); - TCfree (workItem->ReadVolumeHeaderFinalization.NoOutstandingWorkItemEvent); - TCfree (workItem->ReadVolumeHeaderFinalization.outstandingWorkItemCount); - SetWorkItemState (workItem, WorkItemFree); - TC_SET_EVENT (WorkItemCompletedEvent); - continue; default: TC_THROW_FATAL_EXCEPTION; } @@ -588,41 +543,6 @@ void EncryptionThreadPoolBeginKeyDerivation (TC_EVENT *completionEvent, TC_EVENT TC_RELEASE_MUTEX (&EnqueueMutex); } -void EncryptionThreadPoolBeginReadVolumeHeaderFinalization (TC_EVENT *keyDerivationCompletedEvent, TC_EVENT *noOutstandingWorkItemEvent, LONG* outstandingWorkItemCount, - void* keyInfoBuffer, int keyInfoBufferSize, - void* keyDerivationWorkItems, int keyDerivationWorkItemsSize) -{ - EncryptionThreadPoolWorkItem *workItem; - - if (!ThreadPoolRunning) - TC_THROW_FATAL_EXCEPTION; - - TC_ACQUIRE_MUTEX (&EnqueueMutex); - - workItem = &WorkItemQueue[EnqueuePosition++]; - if (EnqueuePosition >= ThreadQueueSize) - EnqueuePosition = 0; - - while (GetWorkItemState (workItem) != WorkItemFree) - { - TC_WAIT_EVENT (WorkItemCompletedEvent); - } - - workItem->Type = ReadVolumeHeaderFinalizationWork; - workItem->ReadVolumeHeaderFinalization.NoOutstandingWorkItemEvent = noOutstandingWorkItemEvent; - workItem->ReadVolumeHeaderFinalization.KeyDerivationCompletedEvent = keyDerivationCompletedEvent; - workItem->ReadVolumeHeaderFinalization.keyInfoBuffer = keyInfoBuffer; - workItem->ReadVolumeHeaderFinalization.keyInfoBufferSize = keyInfoBufferSize; - workItem->ReadVolumeHeaderFinalization.keyDerivationWorkItems = keyDerivationWorkItems; - workItem->ReadVolumeHeaderFinalization.keyDerivationWorkItemsSize = keyDerivationWorkItemsSize; - workItem->ReadVolumeHeaderFinalization.outstandingWorkItemCount = outstandingWorkItemCount; - - SetWorkItemState (workItem, WorkItemReady); - TC_SET_EVENT (WorkItemReadyEvent); - TC_RELEASE_MUTEX (&EnqueueMutex); -} - - void EncryptionThreadPoolDoWork (EncryptionThreadPoolWorkType type, uint8 *data, const UINT64_STRUCT *startUnitNo, uint32 unitCount, PCRYPTO_INFO cryptoInfo) { uint32 fragmentCount; diff --git a/src/Common/EncryptionThreadPool.h b/src/Common/EncryptionThreadPool.h index 50b4031b..e0101435 100644 --- a/src/Common/EncryptionThreadPool.h +++ b/src/Common/EncryptionThreadPool.h @@ -24,8 +24,7 @@ typedef enum { EncryptDataUnitsWork, DecryptDataUnitsWork, - DeriveKeyWork, - ReadVolumeHeaderFinalizationWork + DeriveKeyWork } EncryptionThreadPoolWorkType; #ifndef DEVICE_DRIVER @@ -42,7 +41,6 @@ size_t GetCpuCount (WORD* pGroupCount); * derivationResult receives 0 on success; PRFs that can fail store their native nonzero result. */ void EncryptionThreadPoolBeginKeyDerivation (TC_EVENT *completionEvent, TC_EVENT *noOutstandingWorkItemEvent, LONG *completionFlag, LONG *outstandingWorkItemCount, int pkcs5Prf, unsigned char *password, int passwordLength, unsigned char *salt, int iterationCount, int memoryCost, unsigned char *derivedKey, LONG *derivationResult, LONG volatile *pAbortKeyDerivation); -void EncryptionThreadPoolBeginReadVolumeHeaderFinalization (TC_EVENT *keyDerivationCompletedEvent, TC_EVENT *noOutstandingWorkItemEvent, LONG* outstandingWorkItemCount, void* keyInfoBuffer, int keyInfoBufferSize, void* keyDerivationWorkItems, int keyDerivationWorkItemsSize); void EncryptionThreadPoolDoWork (EncryptionThreadPoolWorkType type, uint8 *data, const UINT64_STRUCT *startUnitNo, uint32 unitCount, PCRYPTO_INFO cryptoInfo); BOOL EncryptionThreadPoolStart (size_t encryptionFreeCpuCount); void EncryptionThreadPoolStop ();