📄 dlgmount.c
字号:
G_UserMountParams.ParamsOK = TRUE;
if (PropSheet_QuerySiblings(hDlg, 0, 0) != 0)
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("PropSheet_QuerySiblings returned non-zero; not proceeding with new volume\n")));
// Do nothing; retval already set to FALSE
}
// Not clear why, but regardless of whether the dlgProc returns
// TRUE/FALSE for the QuerySiblings call, the above always returns zero?!
// Therefore, we use a kludge to get the *real* result...
else if (G_UserMountParams.ParamsOK == FALSE)
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("ParamsOK set to FALSE; not proceeding with new volume\n")));
// Do nothing; retval already set to FALSE
}
else
{
retval = TRUE;
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("_dlgMount_QuerySiblings\n")));
return retval;
}
// =========================================================================
// Dialog OK'd; mount volume
BOOL CALLBACK dlgMount_Mount(HWND hDlg)
{
BOOL retval = FALSE;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgMount_Mount\n")));
memset(&G_UserMountParams, 0, sizeof(G_UserMountParams));
G_UserMountParams.ParamsOK = TRUE;
if (_dlgMount_QuerySiblings(GetParent(hDlg)))
{
HCURSOR csrHourglass;
HCURSOR csrPrevious;
csrHourglass = LoadCursor(NULL, IDC_WAIT);
csrPrevious = SetCursor(csrHourglass);
retval = driver_Mount(
G_UserMountParams.Mountpoint,
G_UserMountParams.Filename,
G_UserMountParams.Keyfile,
G_UserMountParams.OffsetWithinFile,
G_UserMountParams.CDBAtOffset,
G_UserMountParams.UserPassword,
G_UserMountParams.SaltLength,
G_UserMountParams.KeyIterations,
G_UserMountParams.ReadOnly
);
SetCursor(csrPrevious);
}
// Cleardown sensitive information
if (G_UserMountParams.UserPassword != NULL)
{
SecZeroAndFreeMemory(
G_UserMountParams.UserPassword,
strlen(G_UserMountParams.UserPassword)
);
G_UserMountParams.UserPassword = NULL;
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgMount_Mount\n")));
return retval;
}
// =========================================================================
BOOL CALLBACK dlgMount_HandleMsg_WM_COMMAND(HWND hDlg, WPARAM wParam)
{
BOOL retval = FALSE;
int ctrlID;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgMount_HandleMsg_WM_COMMAND\n")));
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: %d\n"), LOWORD(wParam)));
ctrlID = LOWORD(wParam);
switch(ctrlID)
{
case IDOK:
{
// IMPORTANT: EndDialog *not* called for property sheet dialog
// We just forward the msg received by the *page* to the owning
// parent; the property sheet dialog
PropSheet_PressButton(GetParent(hDlg), PSBTN_OK);
retval = TRUE;
break;
}
case IDCANCEL:
{
// IMPORTANT: EndDialog *not* called for property sheet dialog
// We just forward the msg received by the *page* to the owning
// parent; the property sheet dialog
PropSheet_PressButton(GetParent(hDlg), PSBTN_CANCEL);
retval = TRUE;
break;
}
case IDC_BUTTON_BROWSEFILENAME:
case IDC_BUTTON_BROWSEKEYFILE:
{
OPENFILENAME ofn;
DWORD flags;
WCHAR filename[FREEOTFE_MAX_FILENAME_LENGTH];
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Browse...\n")));
memset(filename, 0, sizeof(filename));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hDlg;
ofn.hInstance = NULL;
ofn.lpstrCustomFilter = NULL;
ofn.lpstrFile = filename;
ofn.nMaxFile = (sizeof(filename) / sizeof(filename[0]));
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = NULL;
flags = (
// OFN_HIDEREADONLY |
OFN_FILEMUSTEXIST |
OFN_PATHMUSTEXIST
);
ofn.Flags = flags;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = NULL;
ofn.lCustData = 0;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
if (ctrlID == IDC_BUTTON_BROWSEFILENAME)
{
ofn.lpstrFilter = FILE_FILTER_FLT_VOLUMES;
ofn.nMaxCustFilter = FILE_FILTER_CNT_VOLUMES;
ofn.nFilterIndex = FILE_FILTER_DFLT_VOLUMES;
}
else
{
ofn.lpstrFilter = FILE_FILTER_FLT_KEYFILES;
ofn.nMaxCustFilter = FILE_FILTER_CNT_KEYFILES;
ofn.nFilterIndex = FILE_FILTER_DFLT_KEYFILES;
}
if (GetOpenFileName(&ofn))
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Open file dialog OK'd...\n")));
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Filename: %ls\n"), filename));
if (ctrlID == IDC_BUTTON_BROWSEFILENAME)
{
SetDlgItemText(hDlg, IDC_EDIT_FILENAME, filename);
if (G_Options->MntPntUseVolFilename)
{
dlgMount_HandleMsg_DefaultMountpoint(hDlg);
}
}
else
{
SetDlgItemText(hDlg, IDC_EDIT_KEYFILE, filename);
}
}
else
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Open file dialog cancelled\n")));
}
break;
}
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgMount_HandleMsg_WM_COMMAND\n")));
return TRUE;
}
// =========================================================================
BOOL CALLBACK dlgMount_HandleMsg_PSM_QUERYSIBLINGS(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
BOOL retval = TRUE;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgMount_HandleMsg_PSM_QUERYSIBLINGS\n")));
if (_dlgMount_GetPageIdxOfPage(hDlg) == PAGE_IDX_MOUNT_BASIC)
{
// Process for "Basic" dialog/tab
GetDlgItemText(
hDlg,
IDC_EDIT_FILENAME,
G_UserMountParams.Filename,
sizeof(G_UserMountParams.Filename)
);
GetDlgItemText(
hDlg,
IDC_EDIT_KEYFILE,
G_UserMountParams.Keyfile,
sizeof(G_UserMountParams.Keyfile)
);
// Ditch any previously obtained password...
if (G_UserMountParams.UserPassword != NULL)
{
SecZeroAndFreeMemory(
G_UserMountParams.UserPassword,
strlen(G_UserMountParams.UserPassword)
);
G_UserMountParams.UserPassword = NULL;
}
G_UserMountParams.UserPassword = GetPassword(hDlg, IDC_EDIT_PASSWORD);
retval = (G_UserMountParams.UserPassword != NULL);
G_UserMountParams.ReadOnly = (IsDlgButtonChecked(
hDlg,
IDC_CHECK_READONLY
) == BST_CHECKED);
}
else
{
// Process for "Advanced" dialog/tab
G_UserMountParams.OffsetWithinFile.QuadPart = GetDlgItemInt(
hDlg,
IDC_EDIT_OFFSET,
NULL,
FALSE
);
G_UserMountParams.CDBAtOffset = (IsDlgButtonChecked(
hDlg,
IDC_CHECK_CDBATOFFSET
) == BST_CHECKED);
G_UserMountParams.SaltLength = GetDlgItemInt(
hDlg,
IDC_EDIT_SALTLENGTH,
NULL,
FALSE
);
G_UserMountParams.KeyIterations = GetDlgItemInt(
hDlg,
IDC_EDIT_KEYITERATIONS,
NULL,
FALSE
);
GetDlgItemText(
hDlg,
IDC_EDIT_MOUNTPOINT,
G_UserMountParams.Mountpoint,
sizeof(G_UserMountParams.Mountpoint)
);
// Prohibit reserved mountpoints...
retval = ValidateMountpoint(
hDlg,
G_UserMountParams.Mountpoint,
FALSE,
FALSE
);
}
G_UserMountParams.ParamsOK = (G_UserMountParams.ParamsOK && retval);
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgMount_HandleMsg_PSM_QUERYSIBLINGS\n")));
return retval;
}
// =========================================================================
BOOL CALLBACK dlgMount_PropSheetPageProc(
HWND hDlg,
UINT msg,
WPARAM wParam,
LPARAM lParam
)
{
BOOL retval = FALSE;
//static SHACTIVATEINFO s_sai = {0};
switch(msg)
{
case WM_COMMAND:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_COMMAND\n")));
retval = dlgMount_HandleMsg_WM_COMMAND(hDlg, wParam);
break;
}
case WM_DESTROY:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_DESTROY\n")));
retval = dlgMount_HandleMsg_WM_DESTROY(hDlg);
break;
}
case WM_INITDIALOG:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_INITDIALOG\n")));
//s_sai.cbSize = sizeof(SHACTIVATEINFO);
retval = dlgMount_HandleMsg_WM_INITDIALOG(hDlg, lParam);
break;
}
case WM_NOTIFY:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_NOTIFY\n")));
retval = dlgMount_HandleMsg_WM_NOTIFY(hDlg, wParam, lParam);
break;
}
//case WM_ACTIVATE:
//{
//DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_ACTIVATE\n")));
//SHHandleWMActivate(hDlg, wParam, lParam, &s_sai, 0);
//break;
//}
//case WM_SETTINGCHANGE:
//{
//DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_SETTINGCHANGE\n")));
//SHHandleWMSettingChange(hDlg, wParam, lParam, &s_sai);
//break;
//}
case PSM_QUERYSIBLINGS:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: PSM_QUERYSIBLINGS\n")));
retval = dlgMount_HandleMsg_PSM_QUERYSIBLINGS(hDlg, wParam, lParam);
break;
}
}
return retval;
}
// =========================================================================
// =========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -