VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Common/Random.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/Random.c')
-rw-r--r--src/Common/Random.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/Common/Random.c b/src/Common/Random.c
index 09c55bf3..1080ce7e 100644
--- a/src/Common/Random.c
+++ b/src/Common/Random.c
@@ -14,6 +14,7 @@
#include "Tcdefs.h"
#include "Crc.h"
#include "Random.h"
+#include "Dlgcode.h"
#include "Crypto\cpu.h"
#include "Crypto\jitterentropy.h"
#include "Crypto\rdrand.h"
@@ -96,6 +97,7 @@ HCRYPTPROV hCryptProv;
/* Init the random number generator, setup the hooks, and start the thread */
int RandinitWithCheck ( int* pAlreadyInitialized)
{
+ BOOL bIgnoreHookError = FALSE;
DWORD dwLastError = ERROR_SUCCESS;
if (GetMaxPkcs5OutSize() > RNG_POOL_SIZE)
TC_THROW_FATAL_EXCEPTION;
@@ -129,11 +131,13 @@ int RandinitWithCheck ( int* pAlreadyInitialized)
VirtualLock (pRandPool, RANDOMPOOL_ALLOCSIZE);
}
+ bIgnoreHookError = IsThreadInSecureDesktop(GetCurrentThreadId());
+
hKeyboard = SetWindowsHookEx (WH_KEYBOARD, (HOOKPROC)&KeyboardProc, NULL, GetCurrentThreadId ());
- if (hKeyboard == 0) handleWin32Error (0, SRC_POS);
+ if (hKeyboard == 0 && !bIgnoreHookError) handleWin32Error (0, SRC_POS);
hMouse = SetWindowsHookEx (WH_MOUSE, (HOOKPROC)&MouseProc, NULL, GetCurrentThreadId ());
- if (hMouse == 0)
+ if (hMouse == 0 && !bIgnoreHookError)
{
handleWin32Error (0, SRC_POS);
goto error;