mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 19:08:26 -06:00
Windows: Better command line handling to make it more strict and robust. This avoids issues when using wrong syntax.
This commit is contained in:
@@ -130,109 +130,46 @@ int GetArgSepPosOffset (char *lpszArgument)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetArgumentID (argumentspec *as, char *lpszArgument, int *nArgPos)
|
int GetArgumentID (argumentspec *as, char *lpszArgument)
|
||||||
{
|
{
|
||||||
char szTmp[MAX_PATH * 2];
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = strlen (lpszArgument);
|
|
||||||
szTmp[i] = 0;
|
|
||||||
while (--i >= 0)
|
|
||||||
{
|
|
||||||
szTmp[i] = (char) tolower (lpszArgument[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < as->arg_cnt; i++)
|
for (i = 0; i < as->arg_cnt; i++)
|
||||||
{
|
{
|
||||||
size_t k;
|
if (_stricmp (as->args[i].long_name, lpszArgument) == 0)
|
||||||
|
|
||||||
k = strlen (as->args[i].long_name);
|
|
||||||
if (memcmp (as->args[i].long_name, szTmp, k * sizeof (char)) == 0)
|
|
||||||
{
|
{
|
||||||
int x;
|
|
||||||
for (x = i + 1; x < as->arg_cnt; x++)
|
|
||||||
{
|
|
||||||
size_t m;
|
|
||||||
|
|
||||||
m = strlen (as->args[x].long_name);
|
|
||||||
if (memcmp (as->args[x].long_name, szTmp, m * sizeof (char)) == 0)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x == as->arg_cnt)
|
|
||||||
{
|
|
||||||
if (strlen (lpszArgument) != k)
|
|
||||||
*nArgPos = k;
|
|
||||||
else
|
|
||||||
*nArgPos = 0;
|
|
||||||
return as->args[i].Id;
|
return as->args[i].Id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < as->arg_cnt; i++)
|
for (i = 0; i < as->arg_cnt; i++)
|
||||||
{
|
{
|
||||||
size_t k;
|
|
||||||
|
|
||||||
if (as->args[i].short_name[0] == 0)
|
if (as->args[i].short_name[0] == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
k = strlen (as->args[i].short_name);
|
if (_stricmp (as->args[i].short_name, lpszArgument) == 0)
|
||||||
if (memcmp (as->args[i].short_name, szTmp, k * sizeof (char)) == 0)
|
|
||||||
{
|
{
|
||||||
int x;
|
|
||||||
for (x = i + 1; x < as->arg_cnt; x++)
|
|
||||||
{
|
|
||||||
size_t m;
|
|
||||||
|
|
||||||
if (as->args[x].short_name[0] == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
m = strlen (as->args[x].short_name);
|
|
||||||
if (memcmp (as->args[x].short_name, szTmp, m * sizeof (char)) == 0)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x == as->arg_cnt)
|
|
||||||
{
|
|
||||||
if (strlen (lpszArgument) != k)
|
|
||||||
*nArgPos = k;
|
|
||||||
else
|
|
||||||
*nArgPos = 0;
|
|
||||||
return as->args[i].Id;
|
return as->args[i].Id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetArgumentValue (char **lpszCommandLineArgs, int nArgPos, int *nArgIdx,
|
int GetArgumentValue (char **lpszCommandLineArgs, int *nArgIdx,
|
||||||
int nNoCommandLineArgs, char *lpszValue, int nValueSize)
|
int nNoCommandLineArgs, char *lpszValue, int nValueSize)
|
||||||
{
|
{
|
||||||
*lpszValue = 0;
|
*lpszValue = 0;
|
||||||
|
|
||||||
if (nArgPos)
|
if (*nArgIdx + 1 < nNoCommandLineArgs)
|
||||||
{
|
|
||||||
/* Handles the case of no space between parameter code and
|
|
||||||
value */
|
|
||||||
StringCbCopyA (lpszValue, nValueSize, &lpszCommandLineArgs[*nArgIdx][nArgPos]);
|
|
||||||
lpszValue[nValueSize - 1] = 0;
|
|
||||||
return HAS_ARGUMENT;
|
|
||||||
}
|
|
||||||
else if (*nArgIdx + 1 < nNoCommandLineArgs)
|
|
||||||
{
|
{
|
||||||
int x = GetArgSepPosOffset (lpszCommandLineArgs[*nArgIdx + 1]);
|
int x = GetArgSepPosOffset (lpszCommandLineArgs[*nArgIdx + 1]);
|
||||||
if (x == 0)
|
if (x == 0)
|
||||||
{
|
{
|
||||||
/* Handles the case of space between parameter code
|
/* Handles the case of space between parameter code
|
||||||
and value */
|
and value */
|
||||||
StringCbCopyA (lpszValue, nValueSize, &lpszCommandLineArgs[*nArgIdx + 1][x]);
|
StringCbCopyA (lpszValue, nValueSize, lpszCommandLineArgs[*nArgIdx + 1]);
|
||||||
lpszValue[nValueSize - 1] = 0;
|
lpszValue[nValueSize - 1] = 0;
|
||||||
(*nArgIdx)++;
|
(*nArgIdx)++;
|
||||||
return HAS_ARGUMENT;
|
return HAS_ARGUMENT;
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ typedef struct argumentspec_t
|
|||||||
BOOL CALLBACK CommandHelpDlgProc ( HWND hwndDlg , UINT msg , WPARAM wParam , LPARAM lParam );
|
BOOL CALLBACK CommandHelpDlgProc ( HWND hwndDlg , UINT msg , WPARAM wParam , LPARAM lParam );
|
||||||
int Win32CommandLine ( char *lpszCommandLine , char ***lpszArgs );
|
int Win32CommandLine ( char *lpszCommandLine , char ***lpszArgs );
|
||||||
int GetArgSepPosOffset ( char *lpszArgument );
|
int GetArgSepPosOffset ( char *lpszArgument );
|
||||||
int GetArgumentID ( argumentspec *as , char *lpszArgument , int *nArgPos );
|
int GetArgumentID ( argumentspec *as , char *lpszArgument );
|
||||||
int GetArgumentValue ( char **lpszCommandLineArgs , int nArgPos , int *nArgIdx , int nNoCommandLineArgs , char *lpszValue , int nValueSize );
|
int GetArgumentValue ( char **lpszCommandLineArgs , int *nArgIdx , int nNoCommandLineArgs , char *lpszValue , int nValueSize );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7831,7 +7831,6 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
{
|
{
|
||||||
OptionHistory,
|
OptionHistory,
|
||||||
OptionNoIsoCheck,
|
OptionNoIsoCheck,
|
||||||
OptionQuit,
|
|
||||||
OptionTokenLib,
|
OptionTokenLib,
|
||||||
CommandResumeSysEncLogOn,
|
CommandResumeSysEncLogOn,
|
||||||
CommandResumeSysEnc,
|
CommandResumeSysEnc,
|
||||||
@@ -7848,7 +7847,6 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
{
|
{
|
||||||
{ OptionHistory, "/history", "/h", FALSE },
|
{ OptionHistory, "/history", "/h", FALSE },
|
||||||
{ OptionNoIsoCheck, "/noisocheck", "/n", FALSE },
|
{ OptionNoIsoCheck, "/noisocheck", "/n", FALSE },
|
||||||
{ OptionQuit, "/quit", "/q", FALSE },
|
|
||||||
{ OptionTokenLib, "/tokenlib", NULL, FALSE },
|
{ OptionTokenLib, "/tokenlib", NULL, FALSE },
|
||||||
|
|
||||||
{ CommandResumeSysEncLogOn, "/acsysenc", "/a", TRUE },
|
{ CommandResumeSysEncLogOn, "/acsysenc", "/a", TRUE },
|
||||||
@@ -7864,7 +7862,6 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
|
|
||||||
argumentspec as;
|
argumentspec as;
|
||||||
|
|
||||||
int nArgPos;
|
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
if (lpszCommandLineArgs[i] == NULL)
|
if (lpszCommandLineArgs[i] == NULL)
|
||||||
@@ -7873,7 +7870,7 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
as.args = args;
|
as.args = args;
|
||||||
as.arg_cnt = sizeof(args)/ sizeof(args[0]);
|
as.arg_cnt = sizeof(args)/ sizeof(args[0]);
|
||||||
|
|
||||||
x = GetArgumentID (&as, lpszCommandLineArgs[i], &nArgPos);
|
x = GetArgumentID (&as, lpszCommandLineArgs[i]);
|
||||||
|
|
||||||
switch (x)
|
switch (x)
|
||||||
{
|
{
|
||||||
@@ -8004,39 +8001,35 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
|
|
||||||
case OptionHistory:
|
case OptionHistory:
|
||||||
{
|
{
|
||||||
char szTmp[8];
|
char szTmp[8] = {0};
|
||||||
GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
|
bHistory = bHistoryCmdLine = TRUE;
|
||||||
szTmp, sizeof (szTmp));
|
|
||||||
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs,
|
||||||
|
szTmp, sizeof (szTmp)))
|
||||||
|
{
|
||||||
if (!_stricmp(szTmp,"y") || !_stricmp(szTmp,"yes"))
|
if (!_stricmp(szTmp,"y") || !_stricmp(szTmp,"yes"))
|
||||||
{
|
{
|
||||||
bHistory = TRUE;
|
bHistory = TRUE;
|
||||||
bHistoryCmdLine = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_stricmp(szTmp,"n") || !_stricmp(szTmp,"no"))
|
else if (!_stricmp(szTmp,"n") || !_stricmp(szTmp,"no"))
|
||||||
{
|
{
|
||||||
bHistory = FALSE;
|
bHistory = FALSE;
|
||||||
bHistoryCmdLine = TRUE;
|
}
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OptionTokenLib:
|
case OptionTokenLib:
|
||||||
if (GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs, SecurityTokenLibraryPath, sizeof (SecurityTokenLibraryPath)) == HAS_ARGUMENT)
|
if (GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs, SecurityTokenLibraryPath, sizeof (SecurityTokenLibraryPath)) == HAS_ARGUMENT)
|
||||||
InitSecurityTokenLibrary(hwndDlg);
|
InitSecurityTokenLibrary(hwndDlg);
|
||||||
else
|
else
|
||||||
Error ("COMMAND_LINE_ERROR", hwndDlg);
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OptionQuit:
|
|
||||||
{
|
|
||||||
// Used to indicate non-install elevation
|
|
||||||
char szTmp[32];
|
|
||||||
GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs, szTmp, sizeof (szTmp));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
DialogBoxParamW (hInst, MAKEINTRESOURCEW (IDD_COMMANDHELP_DLG), hwndDlg, (DLGPROC)
|
DialogBoxParamW (hInst, MAKEINTRESOURCEW (IDD_COMMANDHELP_DLG), hwndDlg, (DLGPROC)
|
||||||
CommandHelpDlgProc, (LPARAM) &as);
|
CommandHelpDlgProc, (LPARAM) &as);
|
||||||
|
|||||||
@@ -7156,20 +7156,18 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
|
|
||||||
argumentspec as;
|
argumentspec as;
|
||||||
|
|
||||||
int nArgPos;
|
|
||||||
|
|
||||||
as.args = args;
|
as.args = args;
|
||||||
as.arg_cnt = sizeof(args)/ sizeof(args[0]);
|
as.arg_cnt = sizeof(args)/ sizeof(args[0]);
|
||||||
|
|
||||||
switch (GetArgumentID (&as, lpszCommandLineArgs[i], &nArgPos))
|
switch (GetArgumentID (&as, lpszCommandLineArgs[i]))
|
||||||
{
|
{
|
||||||
case OptionAuto:
|
case OptionAuto:
|
||||||
{
|
{
|
||||||
char szTmp[32];
|
char szTmp[32] = {0};
|
||||||
bAuto = TRUE;
|
bAuto = TRUE;
|
||||||
|
|
||||||
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs,
|
||||||
nArgPos, &i, nNoCommandLineArgs, szTmp, sizeof (szTmp)))
|
&i, nNoCommandLineArgs, szTmp, sizeof (szTmp)))
|
||||||
{
|
{
|
||||||
if (!_stricmp (szTmp, "devices"))
|
if (!_stricmp (szTmp, "devices"))
|
||||||
bAutoMountDevices = TRUE;
|
bAutoMountDevices = TRUE;
|
||||||
@@ -7177,6 +7175,8 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
bAutoMountFavorites = TRUE;
|
bAutoMountFavorites = TRUE;
|
||||||
else if (!_stricmp (szTmp, "logon"))
|
else if (!_stricmp (szTmp, "logon"))
|
||||||
LogOn = TRUE;
|
LogOn = TRUE;
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -7187,22 +7187,39 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
|
|
||||||
case OptionCache:
|
case OptionCache:
|
||||||
{
|
{
|
||||||
char szTmp[8];
|
char szTmp[8] = {0};
|
||||||
bCacheInDriver = TRUE;
|
bCacheInDriver = TRUE;
|
||||||
|
|
||||||
GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs,
|
||||||
szTmp, sizeof (szTmp));
|
szTmp, sizeof (szTmp)))
|
||||||
|
{
|
||||||
if (!_stricmp(szTmp,"n") || !_stricmp(szTmp,"no"))
|
if (!_stricmp(szTmp,"n") || !_stricmp(szTmp,"no"))
|
||||||
bCacheInDriver = FALSE;
|
bCacheInDriver = FALSE;
|
||||||
|
else if (!_stricmp(szTmp,"y") || !_stricmp(szTmp,"yes"))
|
||||||
|
bCacheInDriver = FALSE;
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CommandDismount:
|
case CommandDismount:
|
||||||
|
|
||||||
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs,
|
||||||
szDriveLetter, sizeof (szDriveLetter)))
|
szDriveLetter, sizeof (szDriveLetter)))
|
||||||
|
{
|
||||||
|
if ( (strlen(szDriveLetter) == 1)
|
||||||
|
|| (strlen(szDriveLetter) == 2 && szDriveLetter[1] == ':')
|
||||||
|
)
|
||||||
|
{
|
||||||
cmdUnmountDrive = toupper(szDriveLetter[0]) - 'A';
|
cmdUnmountDrive = toupper(szDriveLetter[0]) - 'A';
|
||||||
|
if ((cmdUnmountDrive < 0) || (cmdUnmountDrive > ('Z' - 'A')))
|
||||||
|
AbortProcess ("BAD_DRIVE_LETTER");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AbortProcess ("BAD_DRIVE_LETTER");
|
||||||
|
|
||||||
|
}
|
||||||
else
|
else
|
||||||
cmdUnmountDrive = -1;
|
cmdUnmountDrive = -1;
|
||||||
|
|
||||||
@@ -7218,7 +7235,7 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case OptionKeyfile:
|
case OptionKeyfile:
|
||||||
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, nArgPos, &i,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i,
|
||||||
nNoCommandLineArgs, tmpPath, sizeof (tmpPath)))
|
nNoCommandLineArgs, tmpPath, sizeof (tmpPath)))
|
||||||
{
|
{
|
||||||
KeyFile *kf;
|
KeyFile *kf;
|
||||||
@@ -7230,97 +7247,130 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
FirstCmdKeyFile = KeyFileAdd (FirstCmdKeyFile, kf);
|
FirstCmdKeyFile = KeyFileAdd (FirstCmdKeyFile, kf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OptionLetter:
|
case OptionLetter:
|
||||||
GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs,
|
||||||
szDriveLetter, sizeof (szDriveLetter));
|
szDriveLetter, sizeof (szDriveLetter)))
|
||||||
|
{
|
||||||
|
if ( (strlen(szDriveLetter) == 1)
|
||||||
|
|| (strlen(szDriveLetter) == 2 && szDriveLetter[1] == ':')
|
||||||
|
)
|
||||||
|
{
|
||||||
commandLineDrive = *szDriveLetter = (char) toupper (*szDriveLetter);
|
commandLineDrive = *szDriveLetter = (char) toupper (*szDriveLetter);
|
||||||
|
|
||||||
if (commandLineDrive < 'C' || commandLineDrive > 'Z')
|
if (commandLineDrive < 'C' || commandLineDrive > 'Z')
|
||||||
AbortProcess ("BAD_DRIVE_LETTER");
|
AbortProcess ("BAD_DRIVE_LETTER");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AbortProcess ("BAD_DRIVE_LETTER");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AbortProcess ("BAD_DRIVE_LETTER");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OptionHistory:
|
case OptionHistory:
|
||||||
{
|
{
|
||||||
char szTmp[8];
|
char szTmp[8] = {0};
|
||||||
bHistory = bHistoryCmdLine = TRUE;
|
bHistory = bHistoryCmdLine = TRUE;
|
||||||
|
|
||||||
GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs,
|
||||||
szTmp, sizeof (szTmp));
|
szTmp, sizeof (szTmp)))
|
||||||
|
{
|
||||||
if (!_stricmp(szTmp,"n") || !_stricmp(szTmp,"no"))
|
if (!_stricmp(szTmp,"n") || !_stricmp(szTmp,"no"))
|
||||||
bHistory = FALSE;
|
bHistory = FALSE;
|
||||||
|
else if (!_stricmp(szTmp,"y") || !_stricmp(szTmp,"yes"))
|
||||||
|
bHistory = TRUE;
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OptionMountOption:
|
case OptionMountOption:
|
||||||
{
|
{
|
||||||
char szTmp[16];
|
char szTmp[16] = {0};
|
||||||
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs,
|
||||||
nArgPos, &i, nNoCommandLineArgs, szTmp, sizeof (szTmp)))
|
&i, nNoCommandLineArgs, szTmp, sizeof (szTmp)))
|
||||||
{
|
{
|
||||||
if (!_stricmp (szTmp, "ro") || !_stricmp (szTmp, "readonly"))
|
if (!_stricmp (szTmp, "ro") || !_stricmp (szTmp, "readonly"))
|
||||||
mountOptions.ReadOnly = TRUE;
|
mountOptions.ReadOnly = TRUE;
|
||||||
|
|
||||||
if (!_stricmp (szTmp, "rm") || !_stricmp (szTmp, "removable"))
|
else if (!_stricmp (szTmp, "rm") || !_stricmp (szTmp, "removable"))
|
||||||
mountOptions.Removable = TRUE;
|
mountOptions.Removable = TRUE;
|
||||||
|
|
||||||
if (!_stricmp (szTmp, "ts") || !_stricmp (szTmp, "timestamp"))
|
else if (!_stricmp (szTmp, "ts") || !_stricmp (szTmp, "timestamp"))
|
||||||
mountOptions.PreserveTimestamp = FALSE;
|
mountOptions.PreserveTimestamp = FALSE;
|
||||||
|
|
||||||
if (!_stricmp (szTmp, "sm") || !_stricmp (szTmp, "system"))
|
else if (!_stricmp (szTmp, "sm") || !_stricmp (szTmp, "system"))
|
||||||
mountOptions.PartitionInInactiveSysEncScope = bPrebootPasswordDlgMode = TRUE;
|
mountOptions.PartitionInInactiveSysEncScope = bPrebootPasswordDlgMode = TRUE;
|
||||||
|
|
||||||
if (!_stricmp (szTmp, "bk") || !_stricmp (szTmp, "headerbak"))
|
else if (!_stricmp (szTmp, "bk") || !_stricmp (szTmp, "headerbak"))
|
||||||
mountOptions.UseBackupHeader = TRUE;
|
mountOptions.UseBackupHeader = TRUE;
|
||||||
|
|
||||||
if (!_stricmp (szTmp, "recovery"))
|
else if (!_stricmp (szTmp, "recovery"))
|
||||||
mountOptions.RecoveryMode = TRUE;
|
mountOptions.RecoveryMode = TRUE;
|
||||||
|
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
|
|
||||||
CmdMountOptions = mountOptions;
|
CmdMountOptions = mountOptions;
|
||||||
CmdMountOptionsValid = TRUE;
|
CmdMountOptionsValid = TRUE;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OptionPassword:
|
case OptionPassword:
|
||||||
GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs,
|
||||||
(char *) CmdVolumePassword.Text, sizeof (CmdVolumePassword.Text));
|
(char *) CmdVolumePassword.Text, sizeof (CmdVolumePassword.Text)))
|
||||||
|
{
|
||||||
CmdVolumePassword.Length = strlen ((char *) CmdVolumePassword.Text);
|
CmdVolumePassword.Length = strlen ((char *) CmdVolumePassword.Text);
|
||||||
CmdVolumePasswordValid = TRUE;
|
CmdVolumePasswordValid = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OptionVolume:
|
case OptionVolume:
|
||||||
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, nArgPos, &i,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i,
|
||||||
nNoCommandLineArgs, szFileName, sizeof (szFileName)))
|
nNoCommandLineArgs, szFileName, sizeof (szFileName)))
|
||||||
{
|
{
|
||||||
RelativePath2Absolute (szFileName);
|
RelativePath2Absolute (szFileName);
|
||||||
AddComboItem (GetDlgItem (hwndDlg, IDC_VOLUME), szFileName, bHistory);
|
AddComboItem (GetDlgItem (hwndDlg, IDC_VOLUME), szFileName, bHistory);
|
||||||
CmdLineVolumeSpecified = TRUE;
|
CmdLineVolumeSpecified = TRUE;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OptionQuit:
|
case OptionQuit:
|
||||||
{
|
{
|
||||||
char szTmp[32];
|
char szTmp[32] = {0};
|
||||||
|
|
||||||
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs,
|
||||||
nArgPos, &i, nNoCommandLineArgs, szTmp, sizeof (szTmp)))
|
&i, nNoCommandLineArgs, szTmp, sizeof (szTmp)))
|
||||||
{
|
{
|
||||||
if (!_stricmp (szTmp, "UAC")) // Used to indicate non-install elevation
|
if (!_stricmp (szTmp, "UAC")) // Used to indicate non-install elevation
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!_stricmp (szTmp, "preferences"))
|
else if (!_stricmp (szTmp, "preferences"))
|
||||||
{
|
{
|
||||||
Quit = TRUE;
|
Quit = TRUE;
|
||||||
UsePreferences = TRUE;
|
UsePreferences = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_stricmp (szTmp, "background"))
|
else if (!_stricmp (szTmp, "background"))
|
||||||
bEnableBkgTask = TRUE;
|
bEnableBkgTask = TRUE;
|
||||||
|
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
}
|
}
|
||||||
|
|
||||||
Quit = TRUE;
|
Quit = TRUE;
|
||||||
@@ -7333,10 +7383,10 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case OptionTokenLib:
|
case OptionTokenLib:
|
||||||
if (GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs, SecurityTokenLibraryPath, sizeof (SecurityTokenLibraryPath)) == HAS_ARGUMENT)
|
if (GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs, SecurityTokenLibraryPath, sizeof (SecurityTokenLibraryPath)) == HAS_ARGUMENT)
|
||||||
InitSecurityTokenLibrary(hwndDlg);
|
InitSecurityTokenLibrary(hwndDlg);
|
||||||
else
|
else
|
||||||
Error ("COMMAND_LINE_ERROR", hwndDlg);
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -7352,9 +7402,9 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
|
|
||||||
case OptionPkcs5:
|
case OptionPkcs5:
|
||||||
{
|
{
|
||||||
char szTmp[32];
|
char szTmp[32] = {0};
|
||||||
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs,
|
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs,
|
||||||
nArgPos, &i, nNoCommandLineArgs, szTmp, sizeof (szTmp)))
|
&i, nNoCommandLineArgs, szTmp, sizeof (szTmp)))
|
||||||
{
|
{
|
||||||
if (_stricmp(szTmp, "sha512") == 0 || _stricmp(szTmp, "sha-512") == 0)
|
if (_stricmp(szTmp, "sha512") == 0 || _stricmp(szTmp, "sha-512") == 0)
|
||||||
CmdVolumePkcs5 = SHA512;
|
CmdVolumePkcs5 = SHA512;
|
||||||
@@ -7367,28 +7417,32 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
CmdVolumePkcs5 = 0;
|
CmdVolumePkcs5 = 0;
|
||||||
Error ("COMMAND_LINE_ERROR", hwndDlg);
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Error ("COMMAND_LINE_ERROR", hwndDlg);
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OptionTrueCryptMode:
|
case OptionTrueCryptMode:
|
||||||
CmdVolumeTrueCryptMode = TRUE;
|
CmdVolumeTrueCryptMode = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// no option = file name
|
// no option = file name if there is only one argument
|
||||||
default:
|
default:
|
||||||
|
{
|
||||||
|
if (nNoCommandLineArgs == 1)
|
||||||
{
|
{
|
||||||
strcpy_s (szFileName, array_capacity (szFileName), lpszCommandLineArgs[i]);
|
strcpy_s (szFileName, array_capacity (szFileName), lpszCommandLineArgs[i]);
|
||||||
RelativePath2Absolute (szFileName);
|
RelativePath2Absolute (szFileName);
|
||||||
|
|
||||||
if (nNoCommandLineArgs == 1)
|
|
||||||
CmdLineVolumeSpecified = TRUE;
|
CmdLineVolumeSpecified = TRUE;
|
||||||
AddComboItem (GetDlgItem (hwndDlg, IDC_VOLUME), szFileName, bHistory);
|
AddComboItem (GetDlgItem (hwndDlg, IDC_VOLUME), szFileName, bHistory);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
AbortProcess ("COMMAND_LINE_ERROR");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user