📄 mount.c
字号:
return 1;
}
case WM_COMMAND:
if (lw == IDC_MOUNT_OPTIONS)
{
DialogBoxParam (hInst,
MAKEINTRESOURCE (IDD_MOUNT_OPTIONS), hwndDlg,
(DLGPROC) MountOptionsDlgProc, (LPARAM) &mountOptions);
return 1;
}
if (lw == IDCANCEL || lw == IDOK)
{
char tmp[MAX_PASSWORD+1];
if (lw == IDOK)
{
GetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), szXPwd, MAX_PASSWORD + 1);
bCacheInDriver = IsButtonChecked (GetDlgItem (hwndDlg, IDC_CACHE));
}
// Attempt to wipe password stored in the input field buffer
memset (tmp, 'X', MAX_PASSWORD);
tmp[MAX_PASSWORD] = 0;
SetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), tmp);
SetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), 0);
EndDialog (hwndDlg, lw);
return 1;
}
return 0;
}
return 0;
}
BOOL WINAPI
PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
WORD lw = LOWORD (wParam);
switch (msg)
{
case WM_INITDIALOG:
{
SetDefaultUserFont (hwndDlg);
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_OPEN_EXPLORER), BM_SETCHECK,
bExplore ? BST_CHECKED:BST_UNCHECKED, 0);
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_CLOSE_DISMOUNTED_WINDOWS), BM_SETCHECK,
bCloseDismountedWindows ? BST_CHECKED:BST_UNCHECKED, 0);
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_WIPE_CACHE_ON_EXIT), BM_SETCHECK,
bWipeCacheOnExit ? BST_CHECKED:BST_UNCHECKED, 0);
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_CACHE_PASSWORDS), BM_SETCHECK,
bCacheInDriver ? BST_CHECKED:BST_UNCHECKED, 0);
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_MOUNT_READONLY), BM_SETCHECK,
defaultMountOptions.ReadOnly ? BST_CHECKED:BST_UNCHECKED, 0);
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_MOUNT_REMOVABLE), BM_SETCHECK,
defaultMountOptions.Removable ? BST_CHECKED:BST_UNCHECKED, 0);
return 1;
}
case WM_COMMAND:
if (lw == IDCANCEL)
{
EndDialog (hwndDlg, lw);
return 1;
}
if (lw == IDOK)
{
bExplore = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_OPEN_EXPLORER));
bCloseDismountedWindows = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_CLOSE_DISMOUNTED_WINDOWS));
bWipeCacheOnExit = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_WIPE_CACHE_ON_EXIT));
bCacheInDriver = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_CACHE_PASSWORDS));
defaultMountOptions.ReadOnly = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_MOUNT_READONLY));
defaultMountOptions.Removable = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_MOUNT_REMOVABLE));
EndDialog (hwndDlg, lw);
return 1;
}
return 0;
}
return 0;
}
BOOL WINAPI
VolumePropertiesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
WORD lw = LOWORD (wParam);
switch (msg)
{
case WM_INITDIALOG:
{
VOLUME_PROPERTIES_STRUCT prop;
DWORD dwResult;
BOOL bResult;
LVCOLUMN lvCol;
LVITEM listItem;
HWND list = GetDlgItem (hwndDlg, IDC_VOLUME_PROPERTIES_LIST);
char szTmp[128];
SetDefaultUserFont (hwndDlg);
SendMessage (list,LVM_SETEXTENDEDLISTVIEWSTYLE,0,
LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
//|LVS_EX_GRIDLINES
//|LVS_EX_TWOCLICKACTIVATE
);
memset (&lvCol,0,sizeof(lvCol));
lvCol.mask = LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM|LVCF_FMT;
lvCol.pszText = "Value";
lvCol.cx = 213;
lvCol.fmt = LVCFMT_LEFT ;
SendMessage (list,LVM_INSERTCOLUMN,0,(LPARAM)&lvCol);
lvCol.pszText = "Property";
lvCol.cx = 107;
lvCol.fmt = LVCFMT_LEFT;
SendMessage (list,LVM_INSERTCOLUMN,0,(LPARAM)&lvCol);
memset (&prop, 0, sizeof(prop));
prop.driveNo = HIWORD (GetSelectedLong (GetDlgItem (GetParent(hwndDlg), IDC_DRIVELIST))) - 'A';
bResult = DeviceIoControl (hDriver, VOLUME_PROPERTIES, &prop,
sizeof (prop), &prop, sizeof (prop), &dwResult,
NULL);
memset (&listItem, 0, sizeof(listItem));
listItem.mask = LVIF_TEXT;
listItem.iItem = -1;
listItem.pszText = "Volume Location";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
listItem.pszText = (LPSTR)prop.wszVolume;
if (nCurrentOS == WIN_NT)
{
ToSBCS (prop.wszVolume);
if (prop.wszVolume[0] == '?\\')
listItem.pszText = (LPSTR)prop.wszVolume + 4;
}
ListView_SetItem (list, &listItem);
listItem.pszText = "Volume Size";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
sprintf (szTmp, "%I64u bytes", prop.diskLength);
listItem.pszText = szTmp;
ListView_SetItem (list, &listItem);
listItem.pszText = "Volume Type";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
if (prop.hiddenVolume == TRUE)
sprintf (szTmp, "Hidden");
else
sprintf (szTmp, "Normal");
listItem.pszText = szTmp;
ListView_SetItem (list, &listItem);
listItem.pszText = "Access Mode";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
strcpy (szTmp, prop.readOnly ? "Read-Only" : "Read-Write");
listItem.pszText = szTmp;
ListView_SetItem (list, &listItem);
listItem.pszText = "Encryption Algorithm";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
EAGetName (szTmp, prop.ea);
listItem.pszText = szTmp;
ListView_SetItem (list, &listItem);
listItem.pszText = "Key Size";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
sprintf (szTmp, "%d bits", EAGetKeySize (prop.ea)*8);
listItem.pszText = szTmp;
ListView_SetItem (list, &listItem);
listItem.pszText = "Block Size";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
if (EAGetMode (prop.ea) == INNER_CBC)
{
// Cascaded ciphers with non-equal block sizes
char tmpstr[20];
int i = EAGetLastCipher(prop.ea);
sprintf (tmpstr, "%d", CipherGetBlockSize(i)*8);
strcpy (szTmp, tmpstr);
while (i = EAGetPreviousCipher(prop.ea, i))
{
sprintf (tmpstr, "/%d", CipherGetBlockSize(i)*8);
strcat (szTmp, tmpstr);
}
strcat (szTmp, " bits");
}
else
{
sprintf (szTmp, "%d bits", CipherGetBlockSize (EAGetFirstCipher(prop.ea))*8);
}
listItem.pszText = szTmp;
ListView_SetItem (list, &listItem);
listItem.pszText = "Mode";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
EAGetModeName (szTmp, prop.ea, TRUE);
listItem.pszText = szTmp;
ListView_SetItem (list, &listItem);
listItem.pszText = "PKCS5 PRF";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
listItem.pszText = get_hash_name (prop.pkcs5);
ListView_SetItem (list, &listItem);
listItem.pszText = "PKCS5 Iterations";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
sprintf (szTmp, "%d", prop.pkcs5Iterations);
listItem.pszText = szTmp;
ListView_SetItem (list, &listItem);
{
FILETIME ft, curFt;
SYSTEMTIME st;
char date[128];
memset (date, 0, sizeof (date));
listItem.pszText = "Volume Created";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
*(unsigned __int64 *)(&ft) = prop.volumeCreationTime;
FileTimeToSystemTime (&ft, &st);
GetDateFormat (LOCALE_USER_DEFAULT, 0, &st, 0, (LPSTR) szTmp, sizeof (szTmp));
sprintf (date, "%s ", szTmp);
GetTimeFormat (LOCALE_USER_DEFAULT, 0, &st, 0, (LPSTR) szTmp, sizeof (szTmp));
strcat (date, szTmp);
listItem.pszText = date;
ListView_SetItem (list, &listItem);
listItem.pszText = "Password Changed";
listItem.iItem++;
listItem.iSubItem = 0;
ListView_InsertItem (list, &listItem);
listItem.iSubItem++;
*(unsigned __int64 *)(&ft) = prop.headerCreationTime;
FileTimeToSystemTime (&ft, &st);
GetDateFormat (LOCALE_USER_DEFAULT, 0, &st, 0, (LPSTR) szTmp, sizeof (szTmp));
sprintf (date, "%s ", szTmp);
GetTimeFormat (LOCALE_USER_DEFAULT, 0, &st, 0, (LPSTR) szTmp, sizeof (szTmp));
strcat (date, szTmp);
GetLocalTime (&st);
SystemTimeToFileTime (&st, &curFt);
sprintf (date + strlen (date), " (%I64d days ago)"
, (*(__int64 *)&curFt - *(__int64 *)&ft)/1000000000000 );
listItem.pszText = date;
ListView_SetItem (list, &listItem);
}
return 1;
}
case WM_COMMAND:
if (lw == IDCANCEL)
{
EndDialog (hwndDlg, lw);
return 1;
}
if (lw == IDOK)
{
EndDialog (hwndDlg, lw);
return 1;
}
return 0;
}
return 0;
}
BOOL WINAPI
TravellerDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
WORD lw = LOWORD (wParam);
switch (msg)
{
case WM_INITDIALOG:
{
int i, index;
char drive[] = { 0, ':', 0 };
SetDefaultUserFont (hwndDlg);
SendDlgItemMessage (hwndDlg, IDC_COPY_WIZARD, BM_SETCHECK,
BST_CHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_PREF_OPEN_EXPLORER, BM_SETCHECK,
BST_CHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_AUTORUN_DISABLE, BM_SETCHECK,
BST_CHECKED, 0);
SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_RESETCONTENT, 0, 0);
index = SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_ADDSTRING, 0, (LPARAM) "First available");
SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_SETITEMDATA, index, (LPARAM) 0);
for (i = 'A'; i <= 'Z'; i++)
{
drive[0] = i;
index = SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_ADDSTRING, 0, (LPARAM) drive);
SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_SETITEMDATA, index, (LPARAM) i);
}
SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_SETCURSEL, 0, 0);
return 1;
}
case WM_COMMAND:
if (HIWORD (wParam) == BN_CLICKED
&& (lw == IDC_AUTORUN_DISABLE || lw == IDC_AUTORUN_MOUNT || lw == IDC_AUTORUN_START ))
{
BOOL enabled = !IsButtonChecked (GetDlgItem (hwndDlg, IDC_AUTORUN_DISABLE));
EnableWindow (GetDlgItem (hwndDlg, IDC_BROWSE_FILES), enabled);
EnableWindow (GetDlgItem (hwndDlg, IDC_VOLUME_NAME), enabled);
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_OPEN_EXPLORER), enabled);
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_CACHE_PASSWORDS), enabled);
EnableWindow (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY), enabled);
EnableWindow (GetDlgItem (hwndDlg, IDC_DRIVELIST), enabled);
EnableWindow (GetDlgItem (hwndDlg, IDC_STATIC2), enabled);
EnableWindow (GetDlgItem (hwndDlg, IDC_STATIC3), enabled);
EnableWindow (GetDlgItem (hwndDlg, IDC_STATIC4), enabled);
return 1;
}
if (lw == IDC_BROWSE_FILES)
{
char volName[MAX_PATH] = { 0 };
if (BrowseFiles (hwndDlg, IDS_OPEN_TITLE, volName, FALSE))
SetDlgItemText (hwndDlg, IDC_VOLUME_NAME, strchr (volName, '\\') + 1);
return 1;
}
if (lw == IDC_BROWSE_DIRS)
{
char dstPath[MAX_PATH * 2];
GetDlgItemText (hwndDlg, IDC_DIRECTORY, dstPath, sizeof dstPath);
if (BrowseDirectories (hwndDlg, getstr (IDS_SELECT_DEST_DIR), dstPath))
SetDlgItemText (hwndDlg, IDC_DIRECTORY, dstPath);
return 1;
}
if (lw == IDCANCEL)
{
EndDialog (hwndDlg, lw);
return 1;
}
if (lw == IDOK)
{
BOOL copyWizard, bExplore, bCacheInDriver, bAutoRun, bAutoMount, bMountReadOnly;
char dstDir[MAX_PATH];
char srcPath[MAX_PATH * 2];
char dstPath[MAX_PATH * 2];
char appDir[MAX_PATH];
char sysDir[MAX_PATH];
char volName[MAX_PATH];
char tmpMsg[1024];
int drive;
GetDlgItemText (hwndDlg, IDC_DIRECTORY, dstDir, sizeof dstDir);
volName[0] = 0;
GetDlgItemText (hwndDlg, IDC_VOLUME_NAME, volName + 1, sizeof volName);
drive = SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_GETCURSEL, 0, 0);
drive = SendDlgItemMessage (hwndDlg, IDC_DRIVELIST, CB_GETITEMDATA, drive, 0);
copyWizard = IsButtonChecked (GetDlgItem (hwndDlg, IDC_COPY_WIZARD));
bExplore = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_OPEN_EXPLORER));
bCacheInDriver = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_CACHE_PASSWORDS));
bMountReadOnly = IsButtonChecked (GetDlgItem (hwndDlg, IDC_MOUNT_READONLY));
bAutoRun = !IsButtonChecked (GetDlgItem (hwndDlg, IDC_AUTORUN_DISABLE));
bAutoMount = IsButtonChecked (GetDlgItem (hwndDlg, IDC_AUTORUN_MOUNT));
if (dstDir[0] == 0)
{
SetFocus (GetDlgItem (hwndDlg, IDC_DIRECTORY));
MessageBox(hwndDlg, getstr (IDS_NO_PATH_SELECTED), lpszTitle, MB_ICONEXCLAMATION);
return 1;
}
if (bAutoMount && volName[1] == 0)
{
SetFocus (GetDlgItem (hwndDlg, IDC_VOLUME_NAME));
MessageBox(hwndDlg, getstr (IDS_NO_FILE_SELECTED), lpszTitle, MB_ICONEXCLAMATION);
return 1;
}
if (volName[1] != 0)
{
volName[0] = '"';
strcat (volName, "\"");
}
EnableWindow (GetDlgItem (hwndDlg, IDOK), FALSE);
EnableWindow (GetDlgItem (hwndDlg, IDCANCEL), FALSE);
GetModuleFileName (NULL, appDir, sizeof (appDir));
strrchr (appDir, '\\')[0] = 0;
ArrowWaitCursor();
GetSystemDirectory (sysDir, sizeof (sysDir));
sprintf (dstPath, "%s\\TrueCrypt", dstDir);
CreateDirectory (dstPath, NULL);
// Main app
sprintf (srcPath, "%s\\TrueCrypt.exe", appDir);
sprintf (dstPath, "%s\\TrueCrypt\\TrueCrypt.exe", dstDir);
if (!TCCopyFile (srcPath, dstPath))
{
handleWin32Error (hwndDlg);
goto stop;
}
// Wizard
if (copyWizard)
{
sprintf (srcPath, "%s\\TrueCrypt Format.exe", appDir);
sprintf (dstPath, "%s\\TrueCrypt\\TrueCrypt Format.exe", dstDir);
if (!TCCopyFile (srcPath, dstPath))
{
handleWin32Error (hwndDlg);
goto stop;
}
}
// Driver
sprintf (srcPath, "%s\\Drivers\\truecrypt.sys", sysDir);
sprintf (dstPath, "%s\\TrueCrypt\\truecrypt.sys", dstDir);
if (!TCCopyFile (srcPath, dstPath))
{
handleWin32Error (hwndDlg);
goto stop;
}
// AutoRun
if (bAutoRun)
{
FILE *af;
char autoMount[100];
char openApp[100];
char driveLetter[] = { ' ', '/', 'l', drive, 0 };
sprintf (dstPath, "%s\\autorun.inf", dstDir);
af = fopen (dstPath, "w");
if (af == NULL)
{
MessageBox (hwndDlg, "Cannot create autorun.inf", lpszTitle, MB_ICONERROR);
goto stop;
}
fprintf (af, "[autorun]\n");
sprintf (autoMount, "TrueCrypt\\TrueCrypt.exe /q /a%s%s%s%s /m rm /v %s",
drive > 0 ? driveLetter : "",
bExplore ? " /e" : "",
bCacheInDriver ? " /cy" : "",
bMountReadOnly ? " /m ro" : "",
volName);
sprintf (openApp, "TrueCrypt\\TrueCrypt.exe%s%s%s%s /m rm%s%s",
drive > 0 ? driveLetter : "",
bExplore ? " /e" : "",
bCacheInDriver ? " /cy" : "",
bMountReadOnly ? " /m ro" : "",
volName[0] != 0 ? " /v " : "",
volName[0] != 0 ? volName : "");
fprintf (af, "open=%s\n",
bAutoMount ? autoMount : openApp);
fprintf (af, "shell=%s\n",
bAutoMount ? "mount" : "open");
fprintf (af, "action=%s\n",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -