⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgdumpcdbwizard.c

📁 文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2, MD4, MD5, RIPEMD-128, RIPEMD-160, SHA-1, SHA-224, SHA-256,
💻 C
📖 第 1 页 / 共 4 页
字号:
                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 + -