From c1e81d96924e5e68257f67b65f1dda72e0103bdc Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Wed, 24 Feb 2021 21:48:33 +0100 Subject: Windows: Fix failure to launch keyfile generator in secure desktop mode Hooking is not allowed if thread is running in secure desktop so we ignore SetWindowsHookEx failure in this case and random generator will be initialized using the other entropy sources from the system. --- src/Common/Random.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') 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; -- cgit v1.2.3