📄 dlgdumpcdbwizard.c
字号:
ofn.nFilterIndex = FILE_FILTER_DFLT_TEXTFILES;
}
if (_dlgDumpCDBWizard_GetPageIdxOfPage(hDlg) == PAGE_IDX_SRCFILENAME)
{
fileDlgOK = GetOpenFileName(&ofn);
}
else
{
fileDlgOK = GetSaveFileName(&ofn);
}
if (fileDlgOK)
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("File dialog OK'd...\n")));
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Filename: %ls\n"), filename));
SetDlgItemText(hDlg, IDC_EDIT_FILENAME, filename);
}
else
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("File dialog cancelled\n")));
}
break;
}
case IDC_RADIO_CDBINVOLUME:
case IDC_RADIO_CDBINKEYFILE:
{
_dlgDumpCDBWizard_EnableDisableControls(hDlg);
break;
}
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgDumpCDBWizard_HandleMsg_WM_COMMAND\n")));
return TRUE;
}
// =========================================================================
// Supply with the *main* dialog
BOOL dlgDumpCDBWizard_ValidatePageIdx(HWND hDlg, int PageIdx)
{
BOOL retval = FALSE;
LARGE_INTEGER fileSize;
int errorPage;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgDumpCDBWizard_ValidatePage\n")));
errorPage = G_dlgDumpCDBWizard_UserParams.ErrorPageIdx;
if (!(_dlgDumpCDBWizard_QuerySiblings(hDlg)))
{
// Do nothing; retval already set to FALSE
}
else
{
switch (PageIdx)
{
case PAGE_IDX_SRCFILENAME:
{
// Ensure that filename has been specified
retval = (wcslen(G_dlgDumpCDBWizard_UserParams.SrcFilename) > 0);
if (!(retval))
{
MsgError(hDlg, TEXT("Please enter the filename of an existing volume (with CDB) or keyfile"));
errorPage = PAGE_IDX_SRCFILENAME;
break;
}
else
{
// Ensure file exists
retval = CheckFileExists(G_dlgDumpCDBWizard_UserParams.SrcFilename);
if (!(retval))
{
MsgError(hDlg, TEXT("The file specified does not exist. Please reenter"));
errorPage = PAGE_IDX_SRCFILENAME;
break;
}
}
break;
}
case PAGE_IDX_SRCDETAILS:
{
// Password...
// Ensure that something has been entered as a password
if (G_dlgDumpCDBWizard_UserParams.SrcUserPassword == NULL)
{
// <shrugs>
MsgError(hDlg, TEXT("Error getting user password!"));
errorPage = PAGE_IDX_SRCDETAILS;
// retval already set to FALSE
break;
}
if (strlen(G_dlgDumpCDBWizard_UserParams.SrcUserPassword) == 0)
{
MsgError(hDlg, TEXT("Please enter a password"));
errorPage = PAGE_IDX_SRCDETAILS;
// retval already set to FALSE
break;
}
else
{
retval = TRUE;
}
// Advanced...
// Ensure offset specified is less than the size of the file
retval = (wcslen(G_dlgDumpCDBWizard_UserParams.SrcFilename) > 0);
if (!(retval))
{
// Ignore error; handled by PAGE_IDX_SRCFILENAME
break;
}
else
{
// Only carry out this check if the file already exists
if (CheckFileExists(G_dlgDumpCDBWizard_UserParams.SrcFilename))
{
// File exists...
if (!(GetFileSize_Filename(
G_dlgDumpCDBWizard_UserParams.SrcFilename,
&fileSize
)))
{
MsgError(hDlg, TEXT("Unable to get filesize"));
errorPage = PAGE_IDX_SRCDETAILS;
break;
}
else
{
retval = (fileSize.QuadPart > G_dlgDumpCDBWizard_UserParams.SrcOffset.QuadPart);
if (!(retval))
{
MsgError(hDlg, TEXT("The offset specified is larger than the file selected!"));
errorPage = PAGE_IDX_SRCDETAILS;
break;
}
}
}
}
// Ensure salt is a multiple of 8
retval = ((G_dlgDumpCDBWizard_UserParams.SrcSaltLength % 8) == 0);
if (!(retval))
{
MsgError(hDlg, TEXT("The salt length must be a multiple of 8"));
errorPage = PAGE_IDX_SRCDETAILS;
break;
}
retval = (G_dlgDumpCDBWizard_UserParams.SrcKeyIterations > 0);
if (!(retval))
{
MsgError(hDlg, TEXT("Please enter a number of key iterations greater than one"));
errorPage = PAGE_IDX_SRCDETAILS;
break;
}
break;
}
case PAGE_IDX_DESTFILENAME:
{
// Destination filename cannot already exist
retval = (wcslen(G_dlgDumpCDBWizard_UserParams.DestFilename) > 0);
if (!(retval))
{
MsgError(hDlg, TEXT("Please specify a filename for the CDB dump file"));
errorPage = PAGE_IDX_DESTFILENAME;
break;
}
else
{
retval = (!(CheckFileExists(G_dlgDumpCDBWizard_UserParams.DestFilename)));
if (!(retval))
{
MsgError(hDlg, TEXT("A file with the filename specified already exists; please enter different filename"));
errorPage = PAGE_IDX_DESTFILENAME;
break;
}
}
break;
}
default:
{
// This can't happen?!
MsgError(hDlg, TEXT("Bizarre - validation missed a page!\n\nPlease report seeing this error!"));
errorPage = PageIdx;
retval = FALSE;
}
}
}
G_dlgDumpCDBWizard_PageCompleted[PageIdx] = retval;
if (!(retval))
{
G_dlgDumpCDBWizard_UserParams.ErrorPageIdx = errorPage;
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgDumpCDBWizard_ValidatePage\n")));
return retval;
}
// =========================================================================
// Supply with the dialog to be validated
BOOL dlgDumpCDBWizard_ValidatePage(HWND hDlg)
{
BOOL retval;
int pageIdx;
pageIdx = _dlgDumpCDBWizard_GetPageIdxOfPage(hDlg);
retval = dlgDumpCDBWizard_ValidatePageIdx(GetParent(hDlg), pageIdx);
return retval;
}
// =========================================================================
// Supply with the *main* dialog
BOOL dlgDumpCDBWizard_ValidateAll(HWND hDlg)
{
BOOL retval = TRUE;
int i;
for (i = 0; i < DUMP_CDB_WIZARD_STEPS; i++)
{
retval = retval && dlgDumpCDBWizard_ValidatePageIdx(hDlg, i);
}
return retval;
}
// =========================================================================
// Note: This *purely* gets the data the user entered. No validation. No
// corrections for values that can be autodetermined (validation does
// that, where needed)
BOOL CALLBACK dlgDumpCDBWizard_HandleMsg_PSM_QUERYSIBLINGS(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
BOOL retval = TRUE;
int pageIdx;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgDumpCDBWizard_HandleMsg_PSM_QUERYSIBLINGS\n")));
pageIdx = _dlgDumpCDBWizard_GetPageIdxOfPage(hDlg);
switch (pageIdx)
{
case PAGE_IDX_SRCFILENAME:
{
GetDlgItemText(
hDlg,
IDC_EDIT_FILENAME,
G_dlgDumpCDBWizard_UserParams.SrcFilename,
sizeof(G_dlgDumpCDBWizard_UserParams.SrcFilename)
);
retval = TRUE;
break;
}
case PAGE_IDX_SRCDETAILS:
{
// Password...
// Ditch any previously obtained password...
if (G_dlgDumpCDBWizard_UserParams.SrcUserPassword != NULL)
{
SecZeroAndFreeMemory(
G_dlgDumpCDBWizard_UserParams.SrcUserPassword,
strlen(G_dlgDumpCDBWizard_UserParams.SrcUserPassword)
);
G_dlgDumpCDBWizard_UserParams.SrcUserPassword = NULL;
}
G_dlgDumpCDBWizard_UserParams.SrcUserPassword = GetPassword(
hDumpCDBSrcDetailsWndPassword,
IDC_EDIT_PASSWORD
);
// Advanced...
G_dlgDumpCDBWizard_UserParams.SrcOffset.QuadPart = GetDlgItemInt(
hDumpCDBSrcDetailsWndAdvanced,
IDC_EDIT_OFFSET,
NULL,
FALSE
);
G_dlgDumpCDBWizard_UserParams.SrcSaltLength = GetDlgItemInt(
hDumpCDBSrcDetailsWndAdvanced,
IDC_EDIT_SALTLENGTH,
NULL,
FALSE
);
G_dlgDumpCDBWizard_UserParams.SrcKeyIterations = GetDlgItemInt(
hDumpCDBSrcDetailsWndAdvanced,
IDC_EDIT_KEYITERATIONS,
NULL,
FALSE
);
retval = TRUE;
break;
}
case PAGE_IDX_DESTFILENAME:
{
GetDlgItemText(
hDlg,
IDC_EDIT_FILENAME,
G_dlgDumpCDBWizard_UserParams.DestFilename,
sizeof(G_dlgDumpCDBWizard_UserParams.DestFilename)
);
retval = TRUE;
break;
}
default:
{
// This can't happen?!
MsgError(hDlg, TEXT("Unknown page?!"));
retval = FALSE;
}
}
if (!(retval))
{
G_dlgDumpCDBWizard_UserParams.ParamsOK = FALSE;
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgDumpCDBWizard_HandleMsg_PSM_QUERYSIBLINGS\n")));
return retval;
}
// =========================================================================
BOOL CALLBACK dlgDumpCDBWizard_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 = dlgDumpCDBWizard_HandleMsg_WM_COMMAND(hDlg, wParam);
break;
}
case WM_DESTROY:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_DESTROY\n")));
retval = dlgDumpCDBWizard_HandleMsg_WM_DESTROY(hDlg);
break;
}
case WM_INITDIALOG:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_INITDIALOG\n")));
//s_sai.cbSize = sizeof(SHACTIVATEINFO);
retval = dlgDumpCDBWizard_HandleMsg_WM_INITDIALOG(hDlg, lParam);
break;
}
case WM_NOTIFY:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_NOTIFY\n")));
retval = dlgDumpCDBWizard_HandleMsg_WM_NOTIFY(hDlg, wParam, lParam);
break;
}
case WM_SIZE:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_SIZE\n")));
retval = dlgDumpCDBWizard_HandleMsg_WM_SIZE(hDlg);
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 = dlgDumpCDBWizard_HandleMsg_PSM_QUERYSIBLINGS(hDlg, wParam, lParam);
break;
}
}
return retval;
}
// =========================================================================
// =========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -