mirror of
https://github.com/veracrypt/VeraCrypt
synced 2024-11-10 13:13:34 +01:00
Windows: retry UAC prompt operation in case of failure. This avoids cancel the whole operation if the user is not in front of the machine during UAC prompt (this happens ofter during in-place encryption of big NTFS partitions).
This commit is contained in:
parent
b16cfa959d
commit
96b39a5973
@ -43,12 +43,27 @@ BOOL ComGetInstanceBase (HWND hWnd, REFCLSID clsid, REFIID iid, void **tcServer)
|
||||
BOOL r;
|
||||
|
||||
if (IsUacSupported ())
|
||||
r = CreateElevatedComObject (hWnd, clsid, iid, tcServer) == S_OK;
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
r = CreateElevatedComObject (hWnd, clsid, iid, tcServer) == S_OK;
|
||||
if (r)
|
||||
break;
|
||||
else
|
||||
{
|
||||
if (IDRETRY == ErrorRetryCancel ("UAC_INIT_ERROR", hWnd))
|
||||
continue;
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
r = CoCreateInstance (clsid, NULL, CLSCTX_LOCAL_SERVER, iid, tcServer) == S_OK;
|
||||
|
||||
if (!r)
|
||||
Error ("UAC_INIT_ERROR", hWnd);
|
||||
if (!r)
|
||||
Error ("UAC_INIT_ERROR", hWnd);
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
@ -8089,6 +8089,11 @@ int Error (char *stringId, HWND hwnd)
|
||||
return MessageBoxW (hwnd, GetString (stringId), lpszTitle, MB_ICONERROR);
|
||||
}
|
||||
|
||||
int ErrorRetryCancel (char *stringId, HWND hwnd)
|
||||
{
|
||||
if (Silent) return 0;
|
||||
return MessageBoxW (hwnd, GetString (stringId), lpszTitle, MB_ICONERROR | MB_RETRYCANCEL);
|
||||
}
|
||||
|
||||
int ErrorTopMost (char *stringId, HWND hwnd)
|
||||
{
|
||||
|
@ -385,6 +385,7 @@ int Warning (char *stringId, HWND hwnd);
|
||||
int WarningTopMost (char *stringId, HWND hwnd);
|
||||
int WarningDirect (const wchar_t *warnMsg, HWND hwnd);
|
||||
int Error (char *stringId, HWND hwnd);
|
||||
int ErrorRetryCancel (char *stringId, HWND hwnd);
|
||||
int ErrorDirect (const wchar_t *errMsg, HWND hwnd);
|
||||
int ErrorTopMost (char *stringId, HWND hwnd);
|
||||
int AskYesNo (char *stringId, HWND hwnd);
|
||||
|
@ -266,14 +266,18 @@ static BOOL ElevateWholeWizardProcess (string arguments)
|
||||
|
||||
GetModuleFileName (NULL, modPath, sizeof (modPath));
|
||||
|
||||
if ((int)ShellExecute (MainDlg, "runas", modPath, (string("/q UAC ") + arguments).c_str(), NULL, SW_SHOWNORMAL) > 32)
|
||||
{
|
||||
exit (0);
|
||||
}
|
||||
else
|
||||
while (true)
|
||||
{
|
||||
Error ("UAC_INIT_ERROR", MainDlg);
|
||||
return FALSE;
|
||||
if ((int)ShellExecute (MainDlg, "runas", modPath, (string("/q UAC ") + arguments).c_str(), NULL, SW_SHOWNORMAL) > 32)
|
||||
{
|
||||
exit (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IDRETRY == ErrorRetryCancel ("UAC_INIT_ERROR", MainDlg))
|
||||
continue;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user