From fc37cc4a02ed13d1a73b941a9f80975600fd1b99 Mon Sep 17 00:00:00 2001 From: David Foerster Date: Tue, 10 May 2016 20:20:14 +0200 Subject: Normalize all line terminators --- src/Mount/MainCom.cpp | 588 +++++++++++++++++++++++++------------------------- 1 file changed, 294 insertions(+), 294 deletions(-) (limited to 'src/Mount/MainCom.cpp') diff --git a/src/Mount/MainCom.cpp b/src/Mount/MainCom.cpp index 738b243d..6955897d 100644 --- a/src/Mount/MainCom.cpp +++ b/src/Mount/MainCom.cpp @@ -1,294 +1,294 @@ -/* - 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-2016 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. -*/ - -#include -#include -#include -#include "BaseCom.h" -#include "BootEncryption.h" -#include "Dlgcode.h" -#include "MainCom.h" -#include "MainCom_h.h" -#include "MainCom_i.c" -#include "Mount.h" -#include "Password.h" - -using namespace VeraCrypt; - -static volatile LONG ObjectCount = 0; - -class TrueCryptMainCom : public ITrueCryptMainCom -{ - -public: - TrueCryptMainCom (DWORD messageThreadId) : RefCount (0), MessageThreadId (messageThreadId) - { - InterlockedIncrement (&ObjectCount); - } - - virtual ~TrueCryptMainCom () - { - if (InterlockedDecrement (&ObjectCount) == 0) - PostThreadMessage (MessageThreadId, WM_APP, 0, 0); - } - - virtual ULONG STDMETHODCALLTYPE AddRef () - { - return InterlockedIncrement (&RefCount); - } - - virtual ULONG STDMETHODCALLTYPE Release () - { - if (!InterlockedDecrement (&RefCount)) - { - delete this; - return 0; - } - - return RefCount; - } - - virtual HRESULT STDMETHODCALLTYPE QueryInterface (REFIID riid, void **ppvObject) - { - if (riid == IID_IUnknown || riid == IID_ITrueCryptMainCom) - *ppvObject = this; - else - { - *ppvObject = NULL; - return E_NOINTERFACE; - } - - AddRef (); - return S_OK; - } - - virtual void STDMETHODCALLTYPE AnalyzeKernelMiniDump (LONG_PTR hwndDlg) - { - // Do nothing - MainDlg = (HWND) hwndDlg; - } - - virtual int STDMETHODCALLTYPE BackupVolumeHeader (LONG_PTR hwndDlg, BOOL bRequireConfirmation, BSTR lpszVolume) - { - MainDlg = (HWND) hwndDlg; - return ::BackupVolumeHeader ((HWND) hwndDlg, bRequireConfirmation, lpszVolume); - } - - virtual int STDMETHODCALLTYPE RestoreVolumeHeader (LONG_PTR hwndDlg, BSTR lpszVolume) - { - MainDlg = (HWND) hwndDlg; - return ::RestoreVolumeHeader ((HWND) hwndDlg, lpszVolume); - } - - virtual DWORD STDMETHODCALLTYPE CallDriver (DWORD ioctl, BSTR input, BSTR *output) - { - return BaseCom::CallDriver (ioctl, input, output); - } - - virtual int STDMETHODCALLTYPE ChangePassword (BSTR volumePath, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd) - { - MainDlg = (HWND) hWnd; - return ::ChangePwd (volumePath, oldPassword, 0, 0, FALSE, newPassword, pkcs5, 0, wipePassCount, (HWND) hWnd); - } - - virtual DWORD STDMETHODCALLTYPE CopyFile (BSTR sourceFile, BSTR destinationFile) - { - return BaseCom::CopyFile (sourceFile, destinationFile); - } - - virtual DWORD STDMETHODCALLTYPE DeleteFile (BSTR file) - { - return BaseCom::DeleteFile (file); - } - - virtual BOOL STDMETHODCALLTYPE IsPagingFileActive (BOOL checkNonWindowsPartitionsOnly) - { - return BaseCom::IsPagingFileActive (checkNonWindowsPartitionsOnly); - } - - virtual DWORD STDMETHODCALLTYPE ReadWriteFile (BOOL write, BOOL device, BSTR filePath, BSTR *bufferBstr, unsigned __int64 offset, unsigned __int32 size, DWORD *sizeDone) - { - return BaseCom::ReadWriteFile (write, device, filePath, bufferBstr, offset, size, sizeDone); - } - - virtual DWORD STDMETHODCALLTYPE RegisterFilterDriver (BOOL registerDriver, int filterType) - { - return BaseCom::RegisterFilterDriver (registerDriver, filterType); - } - - virtual DWORD STDMETHODCALLTYPE RegisterSystemFavoritesService (BOOL registerService) - { - return BaseCom::RegisterSystemFavoritesService (registerService); - } - - virtual DWORD STDMETHODCALLTYPE SetDriverServiceStartType (DWORD startType) - { - return BaseCom::SetDriverServiceStartType (startType); - } - - virtual DWORD STDMETHODCALLTYPE WriteLocalMachineRegistryDwordValue (BSTR keyPath, BSTR valueName, DWORD value) - { - return BaseCom::WriteLocalMachineRegistryDwordValue (keyPath, valueName, value); - } - - virtual int STDMETHODCALLTYPE ChangePasswordEx (BSTR volumePath, Password *oldPassword, int old_pkcs5, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd) - { - MainDlg = (HWND) hWnd; - return ::ChangePwd (volumePath, oldPassword, old_pkcs5, 0, FALSE, newPassword, pkcs5, 0, wipePassCount, (HWND) hWnd); - } - - virtual int STDMETHODCALLTYPE ChangePasswordEx2 (BSTR volumePath, Password *oldPassword, int old_pkcs5, BOOL truecryptMode, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd) - { - MainDlg = (HWND) hWnd; - return ::ChangePwd (volumePath, oldPassword, old_pkcs5, 0, truecryptMode, newPassword, pkcs5, 0, wipePassCount, (HWND) hWnd); - } - - virtual int STDMETHODCALLTYPE ChangePasswordEx3 (BSTR volumePath, Password *oldPassword, int old_pkcs5, int old_pim, BOOL truecryptMode, Password *newPassword, int pkcs5, int pim, int wipePassCount, LONG_PTR hWnd) - { - MainDlg = (HWND) hWnd; - return ::ChangePwd (volumePath, oldPassword, old_pkcs5, old_pim, truecryptMode, newPassword, pkcs5, pim, wipePassCount, (HWND) hWnd); - } - -protected: - DWORD MessageThreadId; - LONG RefCount; -}; - - -extern "C" BOOL ComServerMain () -{ - SetProcessShutdownParameters (0x100, 0); - - TrueCryptFactory factory (GetCurrentThreadId ()); - DWORD cookie; - - if (IsUacSupported ()) - UacElevated = TRUE; - - if (CoRegisterClassObject (CLSID_TrueCryptMainCom, (LPUNKNOWN) &factory, - CLSCTX_LOCAL_SERVER, REGCLS_SINGLEUSE, &cookie) != S_OK) - return FALSE; - - MSG msg; - while (int r = GetMessageW (&msg, NULL, 0, 0)) - { - if (r == -1) - return FALSE; - - TranslateMessage (&msg); - DispatchMessageW (&msg); - - if (msg.message == WM_APP - && ObjectCount < 1 - && !factory.IsServerLocked ()) - break; - } - CoRevokeClassObject (cookie); - - return TRUE; -} - - -static BOOL ComGetInstance (HWND hWnd, ITrueCryptMainCom **tcServer) -{ - return ComGetInstanceBase (hWnd, CLSID_TrueCryptMainCom, IID_ITrueCryptMainCom, (void **) tcServer); -} - - -ITrueCryptMainCom *GetElevatedInstance (HWND parent) -{ - ITrueCryptMainCom *instance; - - if (!ComGetInstance (parent, &instance)) - throw UserAbort (SRC_POS); - - return instance; -} - - -extern "C" int UacBackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, wchar_t *lpszVolume) -{ - CComPtr tc; - int r; - - CoInitialize (NULL); - - if (ComGetInstance (hwndDlg, &tc)) - { - CComBSTR volumeBstr; - BSTR bstr = W2BSTR(lpszVolume); - if (bstr) - { - volumeBstr.Attach (bstr); - r = tc->BackupVolumeHeader ((LONG_PTR) hwndDlg, bRequireConfirmation, volumeBstr); - } - else - r = ERR_OUTOFMEMORY; - } - else - r = -1; - - CoUninitialize (); - - return r; -} - - -extern "C" int UacRestoreVolumeHeader (HWND hwndDlg, wchar_t *lpszVolume) -{ - CComPtr tc; - int r; - - CoInitialize (NULL); - - if (ComGetInstance (hwndDlg, &tc)) - { - CComBSTR volumeBstr; - BSTR bstr = W2BSTR(lpszVolume); - if (bstr) - { - volumeBstr.Attach (bstr); - r = tc->RestoreVolumeHeader ((LONG_PTR) hwndDlg, volumeBstr); - } - else - r = ERR_OUTOFMEMORY; - } - else - r = -1; - - CoUninitialize (); - - return r; -} - - -extern "C" int UacChangePwd (wchar_t *lpszVolume, Password *oldPassword, int old_pkcs5, int old_pim, BOOL truecryptMode, Password *newPassword, int pkcs5, int pim, int wipePassCount, HWND hwndDlg) -{ - CComPtr tc; - int r; - - CoInitialize (NULL); - - if (ComGetInstance (hwndDlg, &tc)) - { - CComBSTR bstrVolume (lpszVolume); - WaitCursor (); - r = tc->ChangePasswordEx3 (bstrVolume, oldPassword, old_pkcs5, old_pim, truecryptMode, newPassword, pkcs5, pim, wipePassCount, (LONG_PTR) hwndDlg); - NormalCursor (); - } - else - r = -1; - - CoUninitialize (); - - return r; -} +/* + 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-2016 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. +*/ + +#include +#include +#include +#include "BaseCom.h" +#include "BootEncryption.h" +#include "Dlgcode.h" +#include "MainCom.h" +#include "MainCom_h.h" +#include "MainCom_i.c" +#include "Mount.h" +#include "Password.h" + +using namespace VeraCrypt; + +static volatile LONG ObjectCount = 0; + +class TrueCryptMainCom : public ITrueCryptMainCom +{ + +public: + TrueCryptMainCom (DWORD messageThreadId) : RefCount (0), MessageThreadId (messageThreadId) + { + InterlockedIncrement (&ObjectCount); + } + + virtual ~TrueCryptMainCom () + { + if (InterlockedDecrement (&ObjectCount) == 0) + PostThreadMessage (MessageThreadId, WM_APP, 0, 0); + } + + virtual ULONG STDMETHODCALLTYPE AddRef () + { + return InterlockedIncrement (&RefCount); + } + + virtual ULONG STDMETHODCALLTYPE Release () + { + if (!InterlockedDecrement (&RefCount)) + { + delete this; + return 0; + } + + return RefCount; + } + + virtual HRESULT STDMETHODCALLTYPE QueryInterface (REFIID riid, void **ppvObject) + { + if (riid == IID_IUnknown || riid == IID_ITrueCryptMainCom) + *ppvObject = this; + else + { + *ppvObject = NULL; + return E_NOINTERFACE; + } + + AddRef (); + return S_OK; + } + + virtual void STDMETHODCALLTYPE AnalyzeKernelMiniDump (LONG_PTR hwndDlg) + { + // Do nothing + MainDlg = (HWND) hwndDlg; + } + + virtual int STDMETHODCALLTYPE BackupVolumeHeader (LONG_PTR hwndDlg, BOOL bRequireConfirmation, BSTR lpszVolume) + { + MainDlg = (HWND) hwndDlg; + return ::BackupVolumeHeader ((HWND) hwndDlg, bRequireConfirmation, lpszVolume); + } + + virtual int STDMETHODCALLTYPE RestoreVolumeHeader (LONG_PTR hwndDlg, BSTR lpszVolume) + { + MainDlg = (HWND) hwndDlg; + return ::RestoreVolumeHeader ((HWND) hwndDlg, lpszVolume); + } + + virtual DWORD STDMETHODCALLTYPE CallDriver (DWORD ioctl, BSTR input, BSTR *output) + { + return BaseCom::CallDriver (ioctl, input, output); + } + + virtual int STDMETHODCALLTYPE ChangePassword (BSTR volumePath, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd) + { + MainDlg = (HWND) hWnd; + return ::ChangePwd (volumePath, oldPassword, 0, 0, FALSE, newPassword, pkcs5, 0, wipePassCount, (HWND) hWnd); + } + + virtual DWORD STDMETHODCALLTYPE CopyFile (BSTR sourceFile, BSTR destinationFile) + { + return BaseCom::CopyFile (sourceFile, destinationFile); + } + + virtual DWORD STDMETHODCALLTYPE DeleteFile (BSTR file) + { + return BaseCom::DeleteFile (file); + } + + virtual BOOL STDMETHODCALLTYPE IsPagingFileActive (BOOL checkNonWindowsPartitionsOnly) + { + return BaseCom::IsPagingFileActive (checkNonWindowsPartitionsOnly); + } + + virtual DWORD STDMETHODCALLTYPE ReadWriteFile (BOOL write, BOOL device, BSTR filePath, BSTR *bufferBstr, unsigned __int64 offset, unsigned __int32 size, DWORD *sizeDone) + { + return BaseCom::ReadWriteFile (write, device, filePath, bufferBstr, offset, size, sizeDone); + } + + virtual DWORD STDMETHODCALLTYPE RegisterFilterDriver (BOOL registerDriver, int filterType) + { + return BaseCom::RegisterFilterDriver (registerDriver, filterType); + } + + virtual DWORD STDMETHODCALLTYPE RegisterSystemFavoritesService (BOOL registerService) + { + return BaseCom::RegisterSystemFavoritesService (registerService); + } + + virtual DWORD STDMETHODCALLTYPE SetDriverServiceStartType (DWORD startType) + { + return BaseCom::SetDriverServiceStartType (startType); + } + + virtual DWORD STDMETHODCALLTYPE WriteLocalMachineRegistryDwordValue (BSTR keyPath, BSTR valueName, DWORD value) + { + return BaseCom::WriteLocalMachineRegistryDwordValue (keyPath, valueName, value); + } + + virtual int STDMETHODCALLTYPE ChangePasswordEx (BSTR volumePath, Password *oldPassword, int old_pkcs5, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd) + { + MainDlg = (HWND) hWnd; + return ::ChangePwd (volumePath, oldPassword, old_pkcs5, 0, FALSE, newPassword, pkcs5, 0, wipePassCount, (HWND) hWnd); + } + + virtual int STDMETHODCALLTYPE ChangePasswordEx2 (BSTR volumePath, Password *oldPassword, int old_pkcs5, BOOL truecryptMode, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd) + { + MainDlg = (HWND) hWnd; + return ::ChangePwd (volumePath, oldPassword, old_pkcs5, 0, truecryptMode, newPassword, pkcs5, 0, wipePassCount, (HWND) hWnd); + } + + virtual int STDMETHODCALLTYPE ChangePasswordEx3 (BSTR volumePath, Password *oldPassword, int old_pkcs5, int old_pim, BOOL truecryptMode, Password *newPassword, int pkcs5, int pim, int wipePassCount, LONG_PTR hWnd) + { + MainDlg = (HWND) hWnd; + return ::ChangePwd (volumePath, oldPassword, old_pkcs5, old_pim, truecryptMode, newPassword, pkcs5, pim, wipePassCount, (HWND) hWnd); + } + +protected: + DWORD MessageThreadId; + LONG RefCount; +}; + + +extern "C" BOOL ComServerMain () +{ + SetProcessShutdownParameters (0x100, 0); + + TrueCryptFactory factory (GetCurrentThreadId ()); + DWORD cookie; + + if (IsUacSupported ()) + UacElevated = TRUE; + + if (CoRegisterClassObject (CLSID_TrueCryptMainCom, (LPUNKNOWN) &factory, + CLSCTX_LOCAL_SERVER, REGCLS_SINGLEUSE, &cookie) != S_OK) + return FALSE; + + MSG msg; + while (int r = GetMessageW (&msg, NULL, 0, 0)) + { + if (r == -1) + return FALSE; + + TranslateMessage (&msg); + DispatchMessageW (&msg); + + if (msg.message == WM_APP + && ObjectCount < 1 + && !factory.IsServerLocked ()) + break; + } + CoRevokeClassObject (cookie); + + return TRUE; +} + + +static BOOL ComGetInstance (HWND hWnd, ITrueCryptMainCom **tcServer) +{ + return ComGetInstanceBase (hWnd, CLSID_TrueCryptMainCom, IID_ITrueCryptMainCom, (void **) tcServer); +} + + +ITrueCryptMainCom *GetElevatedInstance (HWND parent) +{ + ITrueCryptMainCom *instance; + + if (!ComGetInstance (parent, &instance)) + throw UserAbort (SRC_POS); + + return instance; +} + + +extern "C" int UacBackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, wchar_t *lpszVolume) +{ + CComPtr tc; + int r; + + CoInitialize (NULL); + + if (ComGetInstance (hwndDlg, &tc)) + { + CComBSTR volumeBstr; + BSTR bstr = W2BSTR(lpszVolume); + if (bstr) + { + volumeBstr.Attach (bstr); + r = tc->BackupVolumeHeader ((LONG_PTR) hwndDlg, bRequireConfirmation, volumeBstr); + } + else + r = ERR_OUTOFMEMORY; + } + else + r = -1; + + CoUninitialize (); + + return r; +} + + +extern "C" int UacRestoreVolumeHeader (HWND hwndDlg, wchar_t *lpszVolume) +{ + CComPtr tc; + int r; + + CoInitialize (NULL); + + if (ComGetInstance (hwndDlg, &tc)) + { + CComBSTR volumeBstr; + BSTR bstr = W2BSTR(lpszVolume); + if (bstr) + { + volumeBstr.Attach (bstr); + r = tc->RestoreVolumeHeader ((LONG_PTR) hwndDlg, volumeBstr); + } + else + r = ERR_OUTOFMEMORY; + } + else + r = -1; + + CoUninitialize (); + + return r; +} + + +extern "C" int UacChangePwd (wchar_t *lpszVolume, Password *oldPassword, int old_pkcs5, int old_pim, BOOL truecryptMode, Password *newPassword, int pkcs5, int pim, int wipePassCount, HWND hwndDlg) +{ + CComPtr tc; + int r; + + CoInitialize (NULL); + + if (ComGetInstance (hwndDlg, &tc)) + { + CComBSTR bstrVolume (lpszVolume); + WaitCursor (); + r = tc->ChangePasswordEx3 (bstrVolume, oldPassword, old_pkcs5, old_pim, truecryptMode, newPassword, pkcs5, pim, wipePassCount, (LONG_PTR) hwndDlg); + NormalCursor (); + } + else + r = -1; + + CoUninitialize (); + + return r; +} -- cgit v1.2.3