mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 11:08:02 -06:00
Windows: Fix crash when using portable 32-bit "VeraCrypt Format.exe"/"VeraCrypt.exe" on a 64-bit machine where VeraCrypt is already installed
This commit is contained in:
@@ -96,7 +96,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual int STDMETHODCALLTYPE AnalyzeHiddenVolumeHost (
|
virtual int STDMETHODCALLTYPE AnalyzeHiddenVolumeHost (
|
||||||
LONG_PTR hwndDlg, int *driveNo, __int64 hiddenVolHostSize, int *realClusterSize, __int64 *nbrFreeClusters)
|
__int64 hwndDlg, int *driveNo, __int64 hiddenVolHostSize, int *realClusterSize, __int64 *nbrFreeClusters)
|
||||||
{
|
{
|
||||||
return ::AnalyzeHiddenVolumeHost (
|
return ::AnalyzeHiddenVolumeHost (
|
||||||
(HWND) hwndDlg, driveNo, hiddenVolHostSize, realClusterSize, nbrFreeClusters);
|
(HWND) hwndDlg, driveNo, hiddenVolHostSize, realClusterSize, nbrFreeClusters);
|
||||||
@@ -283,7 +283,7 @@ extern "C" int UacAnalyzeHiddenVolumeHost (HWND hwndDlg, int *driveNo, __int64 h
|
|||||||
CoInitialize (NULL);
|
CoInitialize (NULL);
|
||||||
|
|
||||||
if (ComGetInstance (hwndDlg, &tc))
|
if (ComGetInstance (hwndDlg, &tc))
|
||||||
r = tc->AnalyzeHiddenVolumeHost ((LONG_PTR) hwndDlg, driveNo, hiddenVolHostSize, realClusterSize, nbrFreeClusters);
|
r = tc->AnalyzeHiddenVolumeHost ((__int64) hwndDlg, driveNo, hiddenVolHostSize, realClusterSize, nbrFreeClusters);
|
||||||
else
|
else
|
||||||
r = 0;
|
r = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import "..\Common\Password.h";
|
|||||||
[
|
[
|
||||||
uuid(56327DDA-F1A7-4e13-B128-520D129BDEF6),
|
uuid(56327DDA-F1A7-4e13-B128-520D129BDEF6),
|
||||||
helpstring("VeraCrypt Format UAC Support Library"),
|
helpstring("VeraCrypt Format UAC Support Library"),
|
||||||
version(2.8) // Update ComSetup.cpp when changing version number
|
version(2.9) // Update ComSetup.cpp when changing version number
|
||||||
]
|
]
|
||||||
library TrueCryptFormatCom
|
library TrueCryptFormatCom
|
||||||
{
|
{
|
||||||
@@ -28,7 +28,7 @@ library TrueCryptFormatCom
|
|||||||
]
|
]
|
||||||
interface ITrueCryptFormatCom : IUnknown
|
interface ITrueCryptFormatCom : IUnknown
|
||||||
{
|
{
|
||||||
int AnalyzeHiddenVolumeHost (LONG_PTR hwndDlg, int *driveNo, __int64 hiddenVolHostSize, int *realClusterSize, __int64 *nbrFreeClusters);
|
int AnalyzeHiddenVolumeHost (__int64 hwndDlg, int *driveNo, __int64 hiddenVolHostSize, int *realClusterSize, __int64 *nbrFreeClusters);
|
||||||
DWORD CallDriver (DWORD ioctl, BSTR input, BSTR *output);
|
DWORD CallDriver (DWORD ioctl, BSTR input, BSTR *output);
|
||||||
DWORD CopyFile (BSTR sourceFile, BSTR destinationFile);
|
DWORD CopyFile (BSTR sourceFile, BSTR destinationFile);
|
||||||
DWORD DeleteFile (BSTR file);
|
DWORD DeleteFile (BSTR file);
|
||||||
|
|||||||
@@ -71,19 +71,19 @@ public:
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void STDMETHODCALLTYPE AnalyzeKernelMiniDump (LONG_PTR hwndDlg)
|
virtual void STDMETHODCALLTYPE AnalyzeKernelMiniDump (__int64 hwndDlg)
|
||||||
{
|
{
|
||||||
// Do nothing
|
// Do nothing
|
||||||
MainDlg = (HWND) hwndDlg;
|
MainDlg = (HWND) hwndDlg;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int STDMETHODCALLTYPE BackupVolumeHeader (LONG_PTR hwndDlg, BOOL bRequireConfirmation, BSTR lpszVolume)
|
virtual int STDMETHODCALLTYPE BackupVolumeHeader (__int64 hwndDlg, BOOL bRequireConfirmation, BSTR lpszVolume)
|
||||||
{
|
{
|
||||||
MainDlg = (HWND) hwndDlg;
|
MainDlg = (HWND) hwndDlg;
|
||||||
return ::BackupVolumeHeader ((HWND) hwndDlg, bRequireConfirmation, lpszVolume);
|
return ::BackupVolumeHeader ((HWND) hwndDlg, bRequireConfirmation, lpszVolume);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int STDMETHODCALLTYPE RestoreVolumeHeader (LONG_PTR hwndDlg, BSTR lpszVolume)
|
virtual int STDMETHODCALLTYPE RestoreVolumeHeader (__int64 hwndDlg, BSTR lpszVolume)
|
||||||
{
|
{
|
||||||
MainDlg = (HWND) hwndDlg;
|
MainDlg = (HWND) hwndDlg;
|
||||||
return ::RestoreVolumeHeader ((HWND) hwndDlg, lpszVolume);
|
return ::RestoreVolumeHeader ((HWND) hwndDlg, lpszVolume);
|
||||||
@@ -94,7 +94,7 @@ public:
|
|||||||
return BaseCom::CallDriver (ioctl, input, output);
|
return BaseCom::CallDriver (ioctl, input, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int STDMETHODCALLTYPE ChangePassword (BSTR volumePath, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd)
|
virtual int STDMETHODCALLTYPE ChangePassword (BSTR volumePath, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, __int64 hWnd)
|
||||||
{
|
{
|
||||||
MainDlg = (HWND) hWnd;
|
MainDlg = (HWND) hWnd;
|
||||||
return ::ChangePwd (volumePath, oldPassword, 0, 0, FALSE, newPassword, pkcs5, 0, wipePassCount, (HWND) hWnd);
|
return ::ChangePwd (volumePath, oldPassword, 0, 0, FALSE, newPassword, pkcs5, 0, wipePassCount, (HWND) hWnd);
|
||||||
@@ -140,19 +140,19 @@ public:
|
|||||||
return BaseCom::WriteLocalMachineRegistryDwordValue (keyPath, valueName, 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)
|
virtual int STDMETHODCALLTYPE ChangePasswordEx (BSTR volumePath, Password *oldPassword, int old_pkcs5, Password *newPassword, int pkcs5, int wipePassCount, __int64 hWnd)
|
||||||
{
|
{
|
||||||
MainDlg = (HWND) hWnd;
|
MainDlg = (HWND) hWnd;
|
||||||
return ::ChangePwd (volumePath, oldPassword, old_pkcs5, 0, FALSE, newPassword, pkcs5, 0, wipePassCount, (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)
|
virtual int STDMETHODCALLTYPE ChangePasswordEx2 (BSTR volumePath, Password *oldPassword, int old_pkcs5, BOOL truecryptMode, Password *newPassword, int pkcs5, int wipePassCount, __int64 hWnd)
|
||||||
{
|
{
|
||||||
MainDlg = (HWND) hWnd;
|
MainDlg = (HWND) hWnd;
|
||||||
return ::ChangePwd (volumePath, oldPassword, old_pkcs5, 0, truecryptMode, newPassword, pkcs5, 0, wipePassCount, (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)
|
virtual int STDMETHODCALLTYPE ChangePasswordEx3 (BSTR volumePath, Password *oldPassword, int old_pkcs5, int old_pim, BOOL truecryptMode, Password *newPassword, int pkcs5, int pim, int wipePassCount, __int64 hWnd)
|
||||||
{
|
{
|
||||||
MainDlg = (HWND) hWnd;
|
MainDlg = (HWND) hWnd;
|
||||||
return ::ChangePwd (volumePath, oldPassword, old_pkcs5, old_pim, truecryptMode, newPassword, pkcs5, pim, wipePassCount, (HWND) hWnd);
|
return ::ChangePwd (volumePath, oldPassword, old_pkcs5, old_pim, truecryptMode, newPassword, pkcs5, pim, wipePassCount, (HWND) hWnd);
|
||||||
@@ -274,7 +274,7 @@ extern "C" int UacBackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, w
|
|||||||
if (bstr)
|
if (bstr)
|
||||||
{
|
{
|
||||||
volumeBstr.Attach (bstr);
|
volumeBstr.Attach (bstr);
|
||||||
r = tc->BackupVolumeHeader ((LONG_PTR) hwndDlg, bRequireConfirmation, volumeBstr);
|
r = tc->BackupVolumeHeader ((__int64) hwndDlg, bRequireConfirmation, volumeBstr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
r = ERR_OUTOFMEMORY;
|
r = ERR_OUTOFMEMORY;
|
||||||
@@ -302,7 +302,7 @@ extern "C" int UacRestoreVolumeHeader (HWND hwndDlg, wchar_t *lpszVolume)
|
|||||||
if (bstr)
|
if (bstr)
|
||||||
{
|
{
|
||||||
volumeBstr.Attach (bstr);
|
volumeBstr.Attach (bstr);
|
||||||
r = tc->RestoreVolumeHeader ((LONG_PTR) hwndDlg, volumeBstr);
|
r = tc->RestoreVolumeHeader ((__int64) hwndDlg, volumeBstr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
r = ERR_OUTOFMEMORY;
|
r = ERR_OUTOFMEMORY;
|
||||||
@@ -327,7 +327,7 @@ extern "C" int UacChangePwd (wchar_t *lpszVolume, Password *oldPassword, int old
|
|||||||
{
|
{
|
||||||
CComBSTR bstrVolume (lpszVolume);
|
CComBSTR bstrVolume (lpszVolume);
|
||||||
WaitCursor ();
|
WaitCursor ();
|
||||||
r = tc->ChangePasswordEx3 (bstrVolume, oldPassword, old_pkcs5, old_pim, truecryptMode, newPassword, pkcs5, pim, wipePassCount, (LONG_PTR) hwndDlg);
|
r = tc->ChangePasswordEx3 (bstrVolume, oldPassword, old_pkcs5, old_pim, truecryptMode, newPassword, pkcs5, pim, wipePassCount, (__int64) hwndDlg);
|
||||||
NormalCursor ();
|
NormalCursor ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import "..\Common\Password.h";
|
|||||||
[
|
[
|
||||||
uuid(9ACF6176-5FC4-4690-A025-B3306A50EB6A),
|
uuid(9ACF6176-5FC4-4690-A025-B3306A50EB6A),
|
||||||
helpstring("VeraCrypt Main UAC Support Library"),
|
helpstring("VeraCrypt Main UAC Support Library"),
|
||||||
version(2.10) // Update ComSetup.cpp when changing version number
|
version(2.11) // Update ComSetup.cpp when changing version number
|
||||||
]
|
]
|
||||||
library TrueCryptMainCom
|
library TrueCryptMainCom
|
||||||
{
|
{
|
||||||
@@ -28,22 +28,22 @@ library TrueCryptMainCom
|
|||||||
]
|
]
|
||||||
interface ITrueCryptMainCom : IUnknown
|
interface ITrueCryptMainCom : IUnknown
|
||||||
{
|
{
|
||||||
void AnalyzeKernelMiniDump (LONG_PTR hwndDlg);
|
void AnalyzeKernelMiniDump (__int64 hwndDlg);
|
||||||
int BackupVolumeHeader (LONG_PTR hwndDlg, BOOL bRequireConfirmation, BSTR lpszVolume);
|
int BackupVolumeHeader (__int64 hwndDlg, BOOL bRequireConfirmation, BSTR lpszVolume);
|
||||||
DWORD CallDriver (DWORD ioctl, BSTR input, BSTR *output);
|
DWORD CallDriver (DWORD ioctl, BSTR input, BSTR *output);
|
||||||
int ChangePassword (BSTR volumePath, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd);
|
int ChangePassword (BSTR volumePath, Password *oldPassword, Password *newPassword, int pkcs5, int wipePassCount, __int64 hWnd);
|
||||||
DWORD CopyFile (BSTR sourceFile, BSTR destinationFile);
|
DWORD CopyFile (BSTR sourceFile, BSTR destinationFile);
|
||||||
DWORD DeleteFile (BSTR file);
|
DWORD DeleteFile (BSTR file);
|
||||||
BOOL IsPagingFileActive (BOOL checkNonWindowsPartitionsOnly);
|
BOOL IsPagingFileActive (BOOL checkNonWindowsPartitionsOnly);
|
||||||
DWORD ReadWriteFile (BOOL write, BOOL device, BSTR filePath, BSTR *bufferBstr, unsigned __int64 offset, unsigned __int32 size, DWORD *sizeDone);
|
DWORD ReadWriteFile (BOOL write, BOOL device, BSTR filePath, BSTR *bufferBstr, unsigned __int64 offset, unsigned __int32 size, DWORD *sizeDone);
|
||||||
DWORD RegisterFilterDriver (BOOL registerDriver, int filterType);
|
DWORD RegisterFilterDriver (BOOL registerDriver, int filterType);
|
||||||
DWORD RegisterSystemFavoritesService (BOOL registerService);
|
DWORD RegisterSystemFavoritesService (BOOL registerService);
|
||||||
int RestoreVolumeHeader (LONG_PTR hwndDlg, BSTR lpszVolume);
|
int RestoreVolumeHeader (__int64 hwndDlg, BSTR lpszVolume);
|
||||||
DWORD SetDriverServiceStartType (DWORD startType);
|
DWORD SetDriverServiceStartType (DWORD startType);
|
||||||
DWORD WriteLocalMachineRegistryDwordValue (BSTR keyPath, BSTR valueName, DWORD value);
|
DWORD WriteLocalMachineRegistryDwordValue (BSTR keyPath, BSTR valueName, DWORD value);
|
||||||
int ChangePasswordEx (BSTR volumePath, Password *oldPassword, int old_pkcs5, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd);
|
int ChangePasswordEx (BSTR volumePath, Password *oldPassword, int old_pkcs5, Password *newPassword, int pkcs5, int wipePassCount, __int64 hWnd);
|
||||||
int ChangePasswordEx2 (BSTR volumePath, Password *oldPassword, int old_pkcs5, BOOL truecryptMode, Password *newPassword, int pkcs5, int wipePassCount, LONG_PTR hWnd);
|
int ChangePasswordEx2 (BSTR volumePath, Password *oldPassword, int old_pkcs5, BOOL truecryptMode, Password *newPassword, int pkcs5, int wipePassCount, __int64 hWnd);
|
||||||
int ChangePasswordEx3 (BSTR volumePath, Password *oldPassword, int old_pkcs5, int old_pim, BOOL truecryptMode, Password *newPassword, int pkcs5, int pim, int wipePassCount, LONG_PTR hWnd);
|
int ChangePasswordEx3 (BSTR volumePath, Password *oldPassword, int old_pkcs5, int old_pim, BOOL truecryptMode, Password *newPassword, int pkcs5, int pim, int wipePassCount, __int64 hWnd);
|
||||||
DWORD GetFileSize (BSTR filePath, unsigned __int64* pSize);
|
DWORD GetFileSize (BSTR filePath, unsigned __int64* pSize);
|
||||||
DWORD DeviceIoControl (BOOL readOnly, BOOL device, BSTR filePath, DWORD dwIoControlCode, BSTR input, BSTR *output);
|
DWORD DeviceIoControl (BOOL readOnly, BOOL device, BSTR filePath, DWORD dwIoControlCode, BSTR input, BSTR *output);
|
||||||
DWORD InstallEfiBootLoader (BOOL preserveUserConfig, BOOL hiddenOSCreation, int pim, int hashAlg);
|
DWORD InstallEfiBootLoader (BOOL preserveUserConfig, BOOL hiddenOSCreation, int pim, int hashAlg);
|
||||||
|
|||||||
@@ -11,10 +11,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define TC_MAIN_COM_VERSION_MAJOR 2
|
#define TC_MAIN_COM_VERSION_MAJOR 2
|
||||||
#define TC_MAIN_COM_VERSION_MINOR 10
|
#define TC_MAIN_COM_VERSION_MINOR 11
|
||||||
|
|
||||||
#define TC_FORMAT_COM_VERSION_MAJOR 2
|
#define TC_FORMAT_COM_VERSION_MAJOR 2
|
||||||
#define TC_FORMAT_COM_VERSION_MINOR 8
|
#define TC_FORMAT_COM_VERSION_MINOR 9
|
||||||
|
|
||||||
#include <atlbase.h>
|
#include <atlbase.h>
|
||||||
#include <comdef.h>
|
#include <comdef.h>
|
||||||
@@ -39,9 +39,9 @@ extern "C" BOOL RegisterComServers (wchar_t *modulePath)
|
|||||||
UnRegisterTypeLib (LIBID_TrueCryptMainCom, TC_MAIN_COM_VERSION_MAJOR, TC_MAIN_COM_VERSION_MINOR, 0, SYS_WIN32);
|
UnRegisterTypeLib (LIBID_TrueCryptMainCom, TC_MAIN_COM_VERSION_MAJOR, TC_MAIN_COM_VERSION_MINOR, 0, SYS_WIN32);
|
||||||
UnRegisterTypeLib (LIBID_TrueCryptFormatCom, TC_FORMAT_COM_VERSION_MAJOR, TC_FORMAT_COM_VERSION_MINOR, 0, SYS_WIN32);
|
UnRegisterTypeLib (LIBID_TrueCryptFormatCom, TC_FORMAT_COM_VERSION_MAJOR, TC_FORMAT_COM_VERSION_MINOR, 0, SYS_WIN32);
|
||||||
// unregister older versions that may still exist
|
// unregister older versions that may still exist
|
||||||
for (WORD i = 6; i >= 1; i--)
|
for (WORD i = 7; i >= 1; i--)
|
||||||
UnRegisterTypeLib (LIBID_TrueCryptMainCom, TC_MAIN_COM_VERSION_MAJOR, TC_MAIN_COM_VERSION_MINOR-i, 0, SYS_WIN32);
|
UnRegisterTypeLib (LIBID_TrueCryptMainCom, TC_MAIN_COM_VERSION_MAJOR, TC_MAIN_COM_VERSION_MINOR-i, 0, SYS_WIN32);
|
||||||
for (WORD i = 4; i >= 1; i--)
|
for (WORD i = 5; i >= 1; i--)
|
||||||
UnRegisterTypeLib (LIBID_TrueCryptFormatCom, TC_FORMAT_COM_VERSION_MAJOR, TC_FORMAT_COM_VERSION_MINOR-i, 0, SYS_WIN32);
|
UnRegisterTypeLib (LIBID_TrueCryptFormatCom, TC_FORMAT_COM_VERSION_MAJOR, TC_FORMAT_COM_VERSION_MINOR-i, 0, SYS_WIN32);
|
||||||
|
|
||||||
wchar_t setupModule[MAX_PATH];
|
wchar_t setupModule[MAX_PATH];
|
||||||
@@ -78,9 +78,9 @@ extern "C" BOOL UnregisterComServers (wchar_t *modulePath)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
// unregister older versions that may still exist
|
// unregister older versions that may still exist
|
||||||
for (WORD i = 6; i >= 1; i--)
|
for (WORD i = 7; i >= 1; i--)
|
||||||
UnRegisterTypeLib (LIBID_TrueCryptMainCom, TC_MAIN_COM_VERSION_MAJOR, TC_MAIN_COM_VERSION_MINOR-i, 0, SYS_WIN32);
|
UnRegisterTypeLib (LIBID_TrueCryptMainCom, TC_MAIN_COM_VERSION_MAJOR, TC_MAIN_COM_VERSION_MINOR-i, 0, SYS_WIN32);
|
||||||
for (WORD i = 4; i >= 1; i--)
|
for (WORD i = 5; i >= 1; i--)
|
||||||
UnRegisterTypeLib (LIBID_TrueCryptFormatCom, TC_FORMAT_COM_VERSION_MAJOR, TC_FORMAT_COM_VERSION_MINOR-i, 0, SYS_WIN32);
|
UnRegisterTypeLib (LIBID_TrueCryptFormatCom, TC_FORMAT_COM_VERSION_MAJOR, TC_FORMAT_COM_VERSION_MINOR-i, 0, SYS_WIN32);
|
||||||
|
|
||||||
wchar_t module[1024];
|
wchar_t module[1024];
|
||||||
|
|||||||
Reference in New Issue
Block a user