📄 mount.c
字号:
if (bExplore == TRUE) OpenVolumeExplorerWindow (szDriveLetter[0] - 'A');
if (bQuiet) exit (0);
}
else if (bQuiet) exit (1);
RefreshMainDlg(hwndDlg);
}
else if (bExplore == TRUE) OpenVolumeExplorerWindow (szDriveLetter[0] - 'A');
}
if (cmdUnmountDrive > 0)
Dismount (hwndDlg, (char)toupper(szDriveLetter[0]) - 'A');
else if (cmdUnmountDrive == -1)
DismountAll (hwndDlg, bForceUnmount);
if (bQuiet) exit (0);
SetFocus (GetDlgItem (hwndDlg, IDC_DRIVELIST));
}
return 0;
case WM_SYSCOMMAND:
if (lw == IDC_ABOUT)
{
DialogBox (hInst, MAKEINTRESOURCE (IDD_ABOUT_DLG), hwndDlg, (DLGPROC) AboutDlgProc);
return 1;
}
return 0;
case WM_HELP:
OpenPageHelp (hwndDlg);
return 1;
case WM_NOTIFY:
// Single click in drive list
if (((LPNMHDR) lParam)->code == LVN_ITEMCHANGED && (((LPNMLISTVIEW) lParam)->uNewState & LVIS_FOCUSED ))
{
nSelectedDriveIndex = ((LPNMLISTVIEW) lParam)->iItem;
EnableDisableButtons (hwndDlg);
return 1;
}
// Double click in drive list
if (((LPNMHDR) lParam)->code == LVN_ITEMACTIVATE)
{
int state = GetItemLong(GetDlgItem (hwndDlg, IDC_DRIVELIST), ((LPNMITEMACTIVATE)lParam)->iItem );
nSelectedDriveIndex = ((LPNMITEMACTIVATE)lParam)->iItem;
if (LOWORD(state) == VMOUNTED)
{
// Open explorer window for mounted volume
ArrowWaitCursor ();
OpenVolumeExplorerWindow (HIWORD(state) - 'A');
NormalCursor ();
}
else if (LOWORD (GetSelectedLong (GetDlgItem (hwndDlg, IDC_DRIVELIST))) == VFREE)
{
Mount (hwndDlg);
}
}
return 0;
case WM_ERASEBKGND:
return 0;
case WM_COMMAND:
if (lw == IDCANCEL)
{
EndMainDlg (hwndDlg);
return 1;
}
if (lw == IDHELP || lw == IDM_HELP)
{
OpenPageHelp (hwndDlg);
return 1;
}
if (lw == IDM_ABOUT || lw == IDB_LOGO)
{
DialogBox (hInst, MAKEINTRESOURCE (IDD_ABOUT_DLG), hwndDlg, (DLGPROC) AboutDlgProc);
return 1;
}
if ((lw == IDOK || lw == ID_MOUNT_VOLUME || lw == IDM_MOUNT_VOLUME_OPTIONS)
&& LOWORD (GetSelectedLong (GetDlgItem (hwndDlg, IDC_DRIVELIST))) == VFREE)
{
mountOptions = defaultMountOptions;
if (lw == IDM_MOUNT_VOLUME_OPTIONS || GetAsyncKeyState (VK_CONTROL) < 0)
{
if (IDCANCEL == DialogBoxParam (hInst,
MAKEINTRESOURCE (IDD_MOUNT_OPTIONS), hwndDlg,
(DLGPROC) MountOptionsDlgProc, (LPARAM) &mountOptions))
return 1;
}
Mount (hwndDlg);
return 1;
}
if ((lw == IDOK || lw == ID_MOUNT_VOLUME || lw == IDC_MOUNTALL)
&& LOWORD (GetSelectedLong (GetDlgItem (hwndDlg, IDC_DRIVELIST))) == 0xffff)
{
MessageBox (hwndDlg, "Please select a free drive letter from the list.","TrueCrypt", MB_ICONEXCLAMATION);
return 1;
}
if (lw == IDOK && LOWORD (GetSelectedLong (GetDlgItem (hwndDlg, IDC_DRIVELIST))) == VMOUNTED
|| lw == ID_UNMOUNT_VOLUME)
{
Dismount (hwndDlg, 0);
return 1;
}
if (lw == IDUNMOUNTALL)
{
DismountAll (hwndDlg, bForceUnmount);
return 1;
}
if (lw == IDC_MOUNTALL)
{
MountAllDevices (hwndDlg);
return 1;
}
if (lw == IDC_BROWSE_FILES)
{
SelectContainer (hwndDlg);
return 1;
}
if (lw == IDC_BROWSE_DEVICES)
{
SelectPartition (hwndDlg);
return 1;
}
if (lw == IDC_CHANGE_PASSWORD)
{
ChangePassword (hwndDlg);
return 1;
}
if (lw == IDC_WIPE_CACHE)
{
WipeCache (hwndDlg);
return 1;
}
if (lw == IDC_CLEAR_HISTORY)
{
ClearCombo (GetDlgItem (hwndDlg, IDC_VOLUME));
DumpCombo (GetDlgItem (hwndDlg, IDC_VOLUME), "LastMountedVolume", TRUE);
EnableDisableButtons (hwndDlg);
return 1;
}
if (lw == IDC_CREATE_VOLUME)
{
char t[TC_MAX_PATH];
char *tmp;
GetModuleFileName (NULL, t, sizeof (t));
tmp = strrchr (t, '\\');
if (tmp)
{
strcpy (++tmp, "TrueCrypt Format.exe");
ShellExecute (NULL, "open", t, NULL, NULL, SW_SHOWNORMAL);
}
return 1;
}
if (lw == ID_LICENSE)
{
char t[TC_MAX_PATH];
char *tmp;
GetModuleFileName (NULL, t, sizeof (t));
tmp = strrchr (t, '\\');
if (tmp)
{
strcpy (++tmp, "License.txt");
ShellExecute (NULL, "open", t, NULL, NULL, SW_SHOWNORMAL);
}
return 1;
}
if (lw == ID_WEBSITE)
{
char tmpstr [256];
sprintf (tmpstr, "http://truecrypt.sourceforge.net/applink.php?version=%s", VERSION_STRING);
ShellExecute (NULL, "open", (LPCTSTR) tmpstr, NULL, NULL, SW_SHOWNORMAL);
return 1;
}
if (lw == ID_FORUMS)
{
char tmpstr [256];
sprintf (tmpstr, "http://truecrypt.sourceforge.net/applink.php?version=%s&dest=forum", VERSION_STRING);
ShellExecute (NULL, "open", (LPCTSTR) tmpstr, NULL, NULL, SW_SHOWNORMAL);
return 1;
}
if (lw == IDM_FAQ)
{
char tmpstr [256];
sprintf (tmpstr, "http://truecrypt.sourceforge.net/applink.php?version=%s&dest=faq", VERSION_STRING);
ShellExecute (NULL, "open", (LPCTSTR) tmpstr, NULL, NULL, SW_SHOWNORMAL);
return 1;
}
if (lw == ID_PREFERENCES)
{
DialogBoxParam (hInst,
MAKEINTRESOURCE (IDD_PREFERENCES_DLG), hwndDlg,
(DLGPROC) PreferencesDlgProc, (LPARAM) 0);
return 1;
}
if (lw == ID_BENCHMARK)
{
Benchmark (hwndDlg);
return 1;
}
if (lw == IDM_TRAVELLER)
{
DialogBoxParam (hInst,
MAKEINTRESOURCE (IDD_TRAVELLER_DLG), hwndDlg,
(DLGPROC) TravellerDlgProc, (LPARAM) 0);
return 1;
}
if (lw == IDM_REFRESH_DRIVE_LETTERS)
{
DWORD driveMap = GetLogicalDrives ();
ArrowWaitCursor ();
BroadcastDeviceChange (DBT_DEVICEREMOVECOMPLETE, 0, ~driveMap);
Sleep (100);
BroadcastDeviceChange (DBT_DEVICEARRIVAL, 0, driveMap);
LoadDriveLetters (GetDlgItem (hwndDlg, IDC_DRIVELIST), 0);
if (nSelectedDriveIndex >= 0)
{
SelectItem (GetDlgItem (hwndDlg, IDC_DRIVELIST),
(char) HIWORD (GetItemLong (GetDlgItem (hwndDlg, IDC_DRIVELIST), nSelectedDriveIndex)));
}
NormalCursor ();
}
if (lw == IDC_VOLUME_PROPERTIES)
{
DialogBoxParam (hInst,
MAKEINTRESOURCE (IDD_VOLUME_PROPERTIES), hwndDlg,
(DLGPROC) VolumePropertiesDlgProc, (LPARAM) 0);
return 1;
}
if (lw == IDC_VOLUME && hw == CBN_EDITCHANGE)
{
EnableDisableButtons (hwndDlg);
return 1;
}
if (lw == IDC_VOLUME && hw == CBN_SELCHANGE)
{
UpdateComboOrder (GetDlgItem (hwndDlg, IDC_VOLUME));
MoveEditToCombo ((HWND) lParam);
PostMessage (hwndDlg, WM_USER+100, 0, 0);
return 1;
}
if (lw == IDC_NO_HISTORY)
{
bHistory = !IsButtonChecked (GetDlgItem (hwndDlg, IDC_NO_HISTORY));
return 1;
}
return 0;
case WM_DROPFILES:
{
HDROP hdrop = (HDROP) wParam;
DragQueryFile (hdrop, 0, szFileName, sizeof szFileName);
DragFinish (hdrop);
AddComboItem (GetDlgItem (hwndDlg, IDC_VOLUME), szFileName);
EnableDisableButtons (hwndDlg);
SetFocus (GetDlgItem (hwndDlg, IDC_DRIVELIST));
}
return 0;
case WM_USER+100:
EnableDisableButtons (hwndDlg);
return 1;
case WM_CLOSE:
EndMainDlg (hwndDlg);
return 1;
}
return 0;
}
void
ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
{
char **lpszCommandLineArgs; /* Array of command line arguments */
int nNoCommandLineArgs; /* The number of arguments in the array */
/* Extract command line arguments */
nNoCommandLineArgs = Win32CommandLine (lpszCommandLine, &lpszCommandLineArgs);
if (nNoCommandLineArgs > 0)
{
int i;
for (i = 0; i < nNoCommandLineArgs; i++)
{
argument args[]=
{
{"/auto", "/a"},
{"/beep", "/b"},
{"/cache", "/c"},
{"/dismount", "/d"},
{"/explore", "/e"},
{"/force", "/f"},
{"/help", "/?"},
{"/history", "/h"},
{"/letter", "/l"},
{"/mountoption", "/m"},
{"/password", "/p"},
{"/quiet", "/q"},
{"/volume", "/v"},
{"/wipecache", "/w"}
};
argumentspec as;
int nArgPos;
int x;
as.args = args;
as.arg_cnt = sizeof(args)/ sizeof(args[0]);
x = GetArgumentID (&as, lpszCommandLineArgs[i], &nArgPos);
switch (x)
{
case 'd':
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
szDriveLetter, sizeof (szDriveLetter)))
cmdUnmountDrive = toupper(szDriveLetter[0]) - 'A';
else
cmdUnmountDrive = -1;
break;
case 'v':
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, nArgPos, &i,
nNoCommandLineArgs, szFileName, sizeof (szFileName)))
{
// Relative path must be converted to absolute
if (szFileName[0] != '\\' && strchr (szFileName, ':') == 0)
{
char path[MAX_PATH*2];
GetCurrentDirectory (MAX_PATH, path);
if (path[strlen (path) - 1] != '\\')
strcat (path, "\\");
strcat (path, szFileName);
strncpy (szFileName, path, MAX_PATH-1);
}
AddComboItem (GetDlgItem (hwndDlg, IDC_VOLUME), szFileName);
}
break;
case 'l':
GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
szDriveLetter, sizeof (szDriveLetter));
commandLineDrive = *szDriveLetter = (char) toupper (*szDriveLetter);
break;
case 'e':
bExplore = TRUE;
break;
case 'b':
bBeep = TRUE;
break;
case 'f':
bForceMount = TRUE;
bForceUnmount = TRUE;
break;
case 'p':
GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
commandLinePassword, sizeof (commandLinePassword));
break;
case 'a':
{
char szTmp[8];
bAuto = TRUE;
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs,
nArgPos, &i, nNoCommandLineArgs, szTmp, sizeof (szTmp)))
{
if (!_stricmp (szTmp, "devices"))
bAutoMountDevices = TRUE;
}
}
break;
case 'm':
{
char szTmp[8];
if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs,
nArgPos, &i, nNoCommandLineArgs, szTmp, sizeof (szTmp)))
{
if (!_stricmp (szTmp, "ro"))
mountOptions.ReadOnly = TRUE;
if (!_stricmp (szTmp, "rm"))
mountOptions.Removable = TRUE;
}
}
break;
case 'c':
{
char szTmp[8];
GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
szTmp, sizeof (szTmp));
if (!_stricmp(szTmp,"y") || !_stricmp(szTmp,"yes"))
bCacheInDriver = TRUE;
if (!_stricmp(szTmp,"n") || !_stricmp(szTmp,"no"))
bCacheInDriver = FALSE;
}
break;
case 'h':
{
char szTmp[8];
GetArgumentValue (lpszCommandLineArgs, nArgPos, &i, nNoCommandLineArgs,
szTmp, sizeof (szTmp));
if (!_stricmp(szTmp,"y") || !_stricmp(szTmp,"yes"))
{
bHistory = TRUE;
bHistoryCmdLine = TRUE;
}
if (!_stricmp(szTmp,"n") || !_stricmp(szTmp,"no"))
{
bHistory = FALSE;
bHistoryCmdLine = TRUE;
}
}
break;
case 'w':
bWipe = TRUE;
break;
case 'q':
bQuiet = TRUE;
break;
case '?':
DialogBoxParam (hInst, MAKEINTRESOURCE (IDD_COMMANDHELP_DLG), hwndDlg, (DLGPROC)
CommandHelpDlgProc, (LPARAM) &as);
exit(0);
break;
// no option = file name
default:
{
strncpy (szFileName, lpszCommandLineArgs[0], MAX_PATH-1);
if (szFileName[0] != '\\' && strchr (szFileName, ':') == 0)
{
char path[MAX_PATH*2];
GetCurrentDirectory (MAX_PATH, path);
strcat (path, "\\");
strcat (path, szFileName);
strncpy (szFileName, path, MAX_PATH-1);
}
AddComboItem (GetDlgItem (hwndDlg, IDC_VOLUME), szFileName);
}
}
}
}
/* Free up the command line arguments */
while (--nNoCommandLineArgs >= 0)
{
free (lpszCommandLineArgs[nNoCommandLineArgs]);
}
}
int WINAPI
WINMAIN (HINSTANCE hInstance, HINSTANCE hPrevInstance, char *lpszCommandLine,
int nCmdShow)
{
int status;
if (nCmdShow && hPrevInstance); /* Remove unused parameter warning */
atexit (localcleanup);
/* Allocate, dup, then store away the application title */
lpszTitle = err_strdup (getstr (IDS_TITLE));
/* Call InitApp to initialize the common code */
InitApp (hInstance);
status = DriverAttach ();
if (status != 0)
{
if (status == ERR_OS_ERROR)
handleWin32Error (NULL);
else
handleError (NULL, status);
AbortProcess (IDS_NODRIVER);
}
/* Create the main dialog box */
DialogBoxParam (hInstance, MAKEINTRESOURCE (IDD_MOUNT_DLG), NULL, (DLGPROC) MainDialogProc,
(LPARAM) lpszCommandLine);
/* Terminate */
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -