mirror of
https://github.com/veracrypt/VeraCrypt
synced 2024-09-20 21:06:22 +02:00
Windows: correctly handle WIN32 LastError when mounting. Harmonize file access checks between GUI and console. Skip ERROR_SHARING_VIOLATION in primary check in order to let the driver handle it more thoroughly.
This commit is contained in:
parent
f397f70fbe
commit
d3db2548b5
@ -6317,6 +6317,7 @@ typedef struct
|
||||
MOUNT_STRUCT* pmount;
|
||||
BOOL* pbResult;
|
||||
DWORD* pdwResult;
|
||||
DWORD dwLastError;
|
||||
} MountThreadParam;
|
||||
|
||||
void CALLBACK MountWaitThreadProc(void* pArg, HWND )
|
||||
@ -6325,6 +6326,8 @@ void CALLBACK MountWaitThreadProc(void* pArg, HWND )
|
||||
|
||||
*(pThreadParam->pbResult) = DeviceIoControl (hDriver, TC_IOCTL_MOUNT_VOLUME, pThreadParam->pmount,
|
||||
sizeof (MOUNT_STRUCT),pThreadParam->pmount, sizeof (MOUNT_STRUCT), pThreadParam->pdwResult, NULL);
|
||||
|
||||
pThreadParam->dwLastError = GetLastError ();
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
@ -6353,7 +6356,7 @@ int MountVolume (HWND hwndDlg,
|
||||
BOOL bReportWrongPassword)
|
||||
{
|
||||
MOUNT_STRUCT mount;
|
||||
DWORD dwResult;
|
||||
DWORD dwResult, dwLastError = ERROR_SUCCESS;
|
||||
BOOL bResult, bDevice;
|
||||
char root[MAX_PATH];
|
||||
int favoriteMountOnArrivalRetryCount = 0;
|
||||
@ -6484,13 +6487,17 @@ int MountVolume (HWND hwndDlg,
|
||||
mountThreadParam.pmount = &mount;
|
||||
mountThreadParam.pbResult = &bResult;
|
||||
mountThreadParam.pdwResult = &dwResult;
|
||||
mountThreadParam.dwLastError = ERROR_SUCCESS;
|
||||
|
||||
ShowWaitDialog (hwndDlg, FALSE, MountWaitThreadProc, &mountThreadParam);
|
||||
|
||||
dwLastError = mountThreadParam.dwLastError;
|
||||
}
|
||||
else
|
||||
{
|
||||
bResult = DeviceIoControl (hDriver, TC_IOCTL_MOUNT_VOLUME, &mount,
|
||||
sizeof (mount), &mount, sizeof (mount), &dwResult, NULL);
|
||||
dwLastError = GetLastError ();
|
||||
}
|
||||
|
||||
burn (&mount.VolumePassword, sizeof (mount.VolumePassword));
|
||||
@ -6499,6 +6506,7 @@ int MountVolume (HWND hwndDlg,
|
||||
burn (&mount.bTrueCryptMode, sizeof (mount.bTrueCryptMode));
|
||||
burn (&mount.ProtectedHidVolPkcs5Prf, sizeof (mount.ProtectedHidVolPkcs5Prf));
|
||||
|
||||
SetLastError (dwLastError);
|
||||
if (bResult == FALSE)
|
||||
{
|
||||
// Volume already open by another process
|
||||
@ -10270,7 +10278,16 @@ BOOL VolumePathExists (const char *volumePath)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return _access (volumePath, 0) == 0;
|
||||
if (_access (volumePath, 0) == 0)
|
||||
return TRUE;
|
||||
else
|
||||
{
|
||||
DWORD dwResult = GetLastError ();
|
||||
if (dwResult == ERROR_SHARING_VIOLATION)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -5182,10 +5182,16 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
||||
|
||||
if (szFileName[0] != 0 && !IsMountedVolume (szFileName))
|
||||
{
|
||||
BOOL mounted;
|
||||
BOOL mounted = FALSE;
|
||||
int EffectiveVolumePkcs5 = CmdVolumePkcs5;
|
||||
BOOL EffectiveVolumeTrueCryptMode = CmdVolumeTrueCryptMode;
|
||||
|
||||
if (!VolumePathExists (szFileName))
|
||||
{
|
||||
handleWin32Error (hwndDlg);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Priority is given to command line parameters
|
||||
* Default values used only when nothing specified in command line
|
||||
*/
|
||||
@ -5251,6 +5257,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
||||
|
||||
NormalCursor ();
|
||||
}
|
||||
}
|
||||
|
||||
if (UsePreferences)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user