:: :: Derived from source code of TrueCrypt 7.1a, which is :: Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed :: by the TrueCrypt License 3.0. :: :: Modifications and additions to the original source code (contained in this file) :: and all other portions of this file are Copyright (c) 2013-2017 IDRIX :: and are governed by the Apache License 2.0 the full text of which is :: contained in the file License.txt included in VeraCrypt binary and source :: code distribution packages. :: :: Usage: BuildDriver <-build|-rebuild|-clean> <-release|-debug> <-x86|-x64> [dir2] ... @echo off set TC_ARG_CMD=%~1 shift set TC_ARG_TYPE=%~1 shift set TC_ARG_ARCH=%~1 shift :: Windows Driver Kit build number set TC_WINDDK_BUILD=7600.16385.1 :: Check for spaces in the current directory path cd | find " " >NUL: if %ERRORLEVEL% == 0 ( echo BuildDriver.cmd: error: MS Build does not support building of projects stored in a path containing spaces. >&2 exit /B 1 ) :: Build options set TC_C_DEFINES=-D_WIN32 -DTC_WINDOWS_DRIVER set TC_C_FLAGS=-nologo -I.. set TC_C_WARNING_LEVEL=-W4 set TC_C_DISABLED_WARNINGS=-wd4057 -wd4100 -wd4127 -wd4152 -wd4201 -wd4701 -wd4702 -wd4706 set TC_LIBRARIAN_FLAGS=-nologo set TC_LINKER_FLAGS=-nologo set TC_TEST_SIGN=0 :: Windows Driver Kit root set TC_WINDDK_ROOT=%SYSTEMDRIVE%\WinDDK\%TC_WINDDK_BUILD% if exist "%TC_WINDDK_ROOT%\bin\setenv.bat" goto ddk_found set TC_WINDDK_ROOT=%WINDDK_ROOT%\%TC_WINDDK_BUILD% if exist "%TC_WINDDK_ROOT%\bin\setenv.bat" goto ddk_found set TC_WINDDK_ROOT=%WINDDK_ROOT% if exist "%TC_WINDDK_ROOT%\bin\setenv.bat" goto ddk_found echo BuildDriver.cmd: error: Windows Driver Development Kit not found in the default directory. Set WINDDK_ROOT environment variable to point to your Windows DDK installation directory. >&2 exit /B 1 :ddk_found :: CPU architecture if "%TC_ARG_ARCH%"=="-x64" ( set TC_BUILD_ARCH=x64 WNET set TC_BUILD_ARCH_DIR=amd64 set TC_ARCH=x64 set TC_ARCH_SUFFIX=-x64 set TC_C_DISABLED_WARNINGS=%TC_C_DISABLED_WARNINGS% -wd4328 -wd4366 set TC_LINKER_FLAGS=%TC_LINKER_FLAGS% -LTCG if defined TC_KERNEL_TEST_CERTIFICATE_NAME set TC_TEST_SIGN=1 ) else ( set TC_BUILD_ARCH=WXP set TC_BUILD_ARCH_DIR=i386 set TC_ARCH=x86 set TC_ARCH_SUFFIX= ) :: Build type if "%TC_ARG_TYPE%"=="-debug" ( set TC_BUILD_TYPE=chk set TC_C_DEFINES=%TC_C_DEFINES% -DDEBUG -D_DEBUG set TC_BUILD_ALT_DIR=_driver_debug set TC_COPY_DIR="..\Debug" ) else ( set TC_BUILD_TYPE=fre set TC_BUILD_ALT_DIR=_driver_release set TC_COPY_DIR="..\Release" set TC_TEST_SIGN=0 ) :: WDK environment pushd . call %TC_WINDDK_ROOT%\bin\setenv %TC_WINDDK_ROOT% %TC_BUILD_TYPE% %TC_BUILD_ARCH% no_oacr || exit /B %errorlevel% popd :: set path to VC++ 2010 IF EXIST "%programfiles(x86)%" (GOTO 64-Bit) ELSE (GOTO 32-Bit) :32-Bit @set "VCPATH=%programfiles%\Microsoft Visual Studio 10.0\" GOTO CONTINUE :64-Bit @set "VCPATH=%programfiles(x86)%\Microsoft Visual Studio 10.0\" GOTO CONTINUE :CONTINUE if "%TC_ARG_ARCH%"=="-x64" ( @set "PATH=%VCPATH%Common7\IDE;%VCPATH%VC\bin\amd64;%PATH%" ) else ( @set "PATH=%VCPATH%Common7\IDE;%VCPATH%VC\bin;%PATH%" ) :: Build if "%TC_ARG_CMD%"=="-rebuild" (set TC_BUILD_OPTS=-c -Z) pushd . :build_dirs if "%~1"=="" goto done cd /D "%~1" || exit /B %errorlevel% if "%TC_ARG_CMD%"=="-clean" ( rd /s /q obj%TC_BUILD_ALT_DIR%\%TC_BUILD_ARCH_DIR% 2>NUL: rd /q obj%TC_BUILD_ALT_DIR% 2>NUL: ) else ( set USER_C_FLAGS=%TC_C_FLAGS% %TC_C_DISABLED_WARNINGS% -FAcs -Fa%~1\obj%TC_BUILD_ALT_DIR%\%TC_BUILD_ARCH_DIR%\ set MSC_WARNING_LEVEL=%TC_C_WARNING_LEVEL% set C_DEFINES=%TC_C_DEFINES% set RCOPTIONS=/I %MFC_INC_PATH% set LIBRARIAN_FLAGS=%TC_LIBRARIAN_FLAGS% set LINKER_FLAGS=%TC_LINKER_FLAGS% set BUILD_ALT_DIR=%TC_BUILD_ALT_DIR% build %TC_BUILD_OPTS% -w -nmake /S -nmake /C 2>build_errors.log 1>&2 if errorlevel 1 ( type build_errors.log type build_errors_asm.log 2>NUL: exit /B 1 ) del /q build_errors.log build_errors_asm.log build%BUILD_ALT_DIR%.* 2>NUL: ) shift goto build_dirs :done popd if "%TC_ARG_CMD%"=="-clean" exit /B 0 md "%TC_COPY_DIR%\Setup Files" >NUL: 2>NUL: copy /B /Y obj%TC_BUILD_ALT_DIR%\%TC_BUILD_ARCH_DIR%\veracrypt.sys "%TC_COPY_DIR%\Setup Files\veracrypt%TC_ARCH_SUFFIX%.sys" >NUL: if errorlevel 1 ( echo BuildDriver.cmd: error: Cannot copy target. >&2 exit /B 1 ) if %TC_TEST_SIGN% equ 1 ( signtool sign /s "%TC_KERNEL_TEST_CERTIFICATE_STORE%" /n "%TC_KERNEL_TEST_CERTIFICATE_NAME%" "%TC_COPY_DIR%\Setup Files\veracrypt%TC_ARCH_SUFFIX%.sys" >NUL: if errorlevel 1 ( echo BuildDriver.cmd: error: Cannot test-sign target. >&2 exit /B 1 ) ) exit /B 0 a>
/*
 Copyright (c) 2008-2010 TrueCrypt Developers Association. All rights reserved.

 Governed by the TrueCrypt License 3.0 the full text of which is contained in
 the file License.txt included in TrueCrypt binary and source code distribution
 packages.
*/

#ifndef TC_HEADER_ENCRYPTION_THREAD_POOL
#define TC_HEADER_ENCRYPTION_THREAD_POOL

#include "Tcdefs.h"
#include "Crypto.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef enum
{
	EncryptDataUnitsWork,
	DecryptDataUnitsWork,
	DeriveKeyWork
} EncryptionThreadPoolWorkType;

void EncryptionThreadPoolBeginKeyDerivation (TC_EVENT *completionEvent, TC_EVENT *noOutstandingWorkItemEvent, LONG *completionFlag, LONG *outstandingWorkItemCount, int pkcs5Prf, char *password, int passwordLength, char *salt, int iterationCount, char *derivedKey);
void EncryptionThreadPoolDoWork (EncryptionThreadPoolWorkType type, byte *data, const UINT64_STRUCT *startUnitNo, uint32 unitCount, PCRYPTO_INFO cryptoInfo);
BOOL EncryptionThreadPoolStart (size_t encryptionFreeCpuCount);
void EncryptionThreadPoolStop ();
size_t GetEncryptionThreadCount ();
size_t GetMaxEncryptionThreadCount ();
BOOL IsEncryptionThreadPoolRunning ();

#ifdef __cplusplus
}
#endif

#endif // TC_HEADER_ENCRYPTION_THREAD_POOL