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

📄 dlgchpasskeyfilewizard.c

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

}


// =========================================================================
void _dlgChpassKeyfileWizard_ShowDetailsTabPage(HWND hWnd, BOOL show)
{
    if (hWnd != NULL)
        {
        if (show)
            {
            ShowWindow(hWnd, SW_SHOW);
            }
        else
            {
            ShowWindow(hWnd, SW_HIDE);
            }
        }
}


// =========================================================================
void _dlgChpassKeyfileWizard_DisplayDetailsTabPage(
    HWND hDlg,
    int CurrPage
)
{
    HWND tabHWND = NULL;
    HWND ctrlShow = NULL;
    int tabIdx;

    // Hide all.
    _dlgChpassKeyfileWizard_ShowDetailsTabPage(
                                              hSrcDetailsWndPassword, 
                                              FALSE
                                             );
    _dlgChpassKeyfileWizard_ShowDetailsTabPage(
                                              hSrcDetailsWndAdvanced, 
                                              FALSE
                                             );
    _dlgChpassKeyfileWizard_ShowDetailsTabPage(
                                              hDestDetailsWndPassword, 
                                              FALSE
                                             );
    _dlgChpassKeyfileWizard_ShowDetailsTabPage(
                                              hDestDetailsWndAdvanced, 
                                              FALSE
                                             );

    if (
        (CurrPage == PAGE_IDX_SRCDETAILS) ||
        (CurrPage == PAGE_IDX_DESTDETAILS)
       )
        {
        tabHWND = GetDlgItem(hDlg, IDC_TAB1);
        if (tabHWND != NULL)
            {
            // Show the appropriate tab sheet...
            tabIdx = TabCtrl_GetCurSel(tabHWND);

            if (CurrPage == PAGE_IDX_SRCDETAILS)
                {
                if (tabIdx == SRCDETAILSTAB_IDX_PASSWORD)
                    {
                    ctrlShow = hSrcDetailsWndPassword;
                    }
                else if (tabIdx == SRCDETAILSTAB_IDX_ADVANCED)
                    {
                    ctrlShow = hSrcDetailsWndAdvanced;
                    }
                }
            else if (CurrPage == PAGE_IDX_DESTDETAILS)
                {
                if (tabIdx == DESTDETAILSTAB_IDX_PASSWORD)
                    {
                    ctrlShow = hDestDetailsWndPassword;
                    }
                else if (tabIdx == DESTDETAILSTAB_IDX_ADVANCED)
                    {
                    ctrlShow = hDestDetailsWndAdvanced;
                    }
                }

            // If changing password on an existing volume/keyfile, set the
            // offset on the dest advanced tab to the src advanced tab
            if (
                (G_dlgChpassKeyfileWizard_DlgMode == DLGMODE_CHPASS) &&
                (ctrlShow == hDestDetailsWndAdvanced)
               )
                {
                SetDlgItemInt(
                              hDestDetailsWndAdvanced,
                              IDC_EDIT_OFFSET,
                              G_dlgChpassKeyfileWizard_ChpassKeyfileParams.SrcOffset.LowPart,
                              TRUE
                             );
                }

            _dlgChpassKeyfileWizard_ShowDetailsTabPage(ctrlShow, TRUE);
            }
        }

}


// =========================================================================
BOOL CALLBACK dlgChpassKeyfileWizard_HandleMsg_WM_NOTIFY(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
    BOOL retval = FALSE;
    int idCtrl;
    NMHDR* notifHdr;
    NMUPDOWN* lpnmud;
    NMUSERRNG_BYTEGEN* lpnmRNG;
    int currPage;

    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgChpassKeyfileWizard_HandleMsg_WM_NOTIFY\n")));

    idCtrl = (int)wParam;
    notifHdr = (NMHDR*)lParam;

    switch (notifHdr->code)
        {
        case URNG_BYTEGEN:
            {
            if (idCtrl == IDCTRL_USERRNG)
                {
                lpnmRNG = (NMUSERRNG_BYTEGEN*)lParam;

                if ((G_dlgChpassKeyfileWizard_ChpassKeyfileParams.RandomPoolFilled_UserInput / 8) < sizeof(G_dlgChpassKeyfileWizard_ChpassKeyfileParams.RandomPool_UserInput))
                    {
                    // Store random byte...
                    G_dlgChpassKeyfileWizard_ChpassKeyfileParams.RandomPool_UserInput[G_dlgChpassKeyfileWizard_ChpassKeyfileParams.RandomPoolFilled_UserInput / 8] = lpnmRNG->Byte;
                    G_dlgChpassKeyfileWizard_ChpassKeyfileParams.RandomPoolFilled_UserInput += 8;

                    // Update display of bits generated...
                    SetDlgItemInt(
                                  hDlg,
                                  IDC_STATIC_USERRNG_STORED,
                                  G_dlgChpassKeyfileWizard_ChpassKeyfileParams.RandomPoolFilled_UserInput,
                                  TRUE
                                 );

                    // Disable control if the userRNG pool is full...
                    if ((G_dlgChpassKeyfileWizard_ChpassKeyfileParams.RandomPoolFilled_UserInput / 8) >= sizeof(G_dlgChpassKeyfileWizard_ChpassKeyfileParams.RandomPool_UserInput))
                        {
                        SetControlEnabled(hDlg, IDCTRL_USERRNG, FALSE);
                        }

                    }
                
                }

            break;
            }

        case TCN_SELCHANGE:
            {
            currPage = _dlgChpassKeyfileWizard_GetPageIdxOfPage(hDlg);

            if (
                (
                 (currPage == PAGE_IDX_SRCDETAILS) ||
                 (currPage == PAGE_IDX_DESTDETAILS) 
                ) &&
                (idCtrl == IDC_TAB1)
               )
                {
                _dlgChpassKeyfileWizard_DisplayDetailsTabPage(hDlg, currPage);
                retval = TRUE;
                }
            
            break;
            }

        // Spin edit up/down button
        case UDN_DELTAPOS:
            {
            switch(idCtrl)
                {
                case IDC_SPIN_OFFSET:
                    {
                    // Offset can only be specified for the src
                    if (hDlg == hSrcDetailsWndAdvanced)
                        {
                        lpnmud = (NMUPDOWN*)lParam;
                        AdjustSpinControl(
                                          hDlg, 
                                          IDC_EDIT_OFFSET, 
                                          0, 
                                          INT_MAX, 
                                          -(lpnmud->iDelta)
                                         );
                        }
                    retval = TRUE;
                    break;
                    }

                case IDC_SPIN_SALTLENGTH:
                    {
                    lpnmud = (NMUPDOWN*)lParam;
                    AdjustSpinControl(
                                      hDlg, 
                                      IDC_EDIT_SALTLENGTH, 
                                      0, 
                                      INT_MAX, 
                                      (-(lpnmud->iDelta) * DELTA_SALT_LENGTH)
                                     );
                    retval = TRUE;
                    break;
                    }

                case IDC_SPIN_KEYITERATIONS:
                    {
                    lpnmud = (NMUPDOWN*)lParam;
                    AdjustSpinControl(
                                      hDlg, 
                                      IDC_EDIT_KEYITERATIONS, 
                                      MIN_KEYITERATIONS, 
                                      INT_MAX, 
                                      (-(lpnmud->iDelta) * DELTA_KEY_ITERATIONS)
                                     );
                    retval = TRUE;
                    break;
                    }

                }

            break;
            }

        case PSN_SETACTIVE:
            {
            currPage = _dlgChpassKeyfileWizard_GetPageIdxOfPage(hDlg);

            _dlgChpassKeyfileWizard_DisplayDetailsTabPage(hDlg, currPage);
            _dlgChpassKeyfileWizard_SetWizardButtons(currPage);

            break; 
            }

        case PSN_KILLACTIVE:
            {
            // (Validate if necessary here)
            // Set the DWL_MSGRESULT to PSNRET_NOERROR to receive PSN_APPLY
            SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR);
            break; 
            }

        case PSN_APPLY:
            {
            // This notification is received when the user clicks
            // "OK"/"Apply"
            // This is called once for each of the tabs.
            // When called, we validate the tab it is called for (this
            // has the effect that the first invalid tab will be automatically
            // selected)
            // If the tab being called for is the last one (the summary),
            // we create the new volume.
            currPage = _dlgChpassKeyfileWizard_GetPageIdxOfPage(hDlg);
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("PSN_APPLY for page idx: %d\n"), currPage));

            SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR);
            if (dlgChpassKeyfileWizard_ValidatePage(hDlg))
                {
                // If it's the last page, only succeed if the volume can be
                // created
                if (currPage != _dlgChpassKeyfileWizard_GetPageIdxOfLastPage())
                    {
                    SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR);
                    }
                else
                    {
                    if (dlgChpassKeyfileWizard_ChpassKeyfile(hDlg))
                        {
                        if (G_dlgChpassKeyfileWizard_DlgMode == DLGMODE_NEWKEYFILE)
                            {
                            MsgInfo(hDlg, TEXT("Keyfile created successfully."));
                            }
                        else
                            {
                            MsgInfo(hDlg, TEXT("Volume/keyfile changed successfully."));
                            }

                        SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR);
                        }
                    else
                        {
                        if (G_dlgChpassKeyfileWizard_DlgMode == DLGMODE_NEWKEYFILE)
                            {
                            MsgError(hDlg, TEXT("Unable to create keyfile; please check your password and other settings, and ensure you have enough storage space to hold a new keyfile"));
                            }
                        else
                            {
                            MsgError(hDlg, TEXT("Unable to update the volume/keyfile as requested; please check your password and other settings"));
                            }

                        SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_INVALID);
                        }
                    }
                }
            else
                {
                SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_INVALID);
                }

            break; 
            }

        case PSN_RESET:
            {
            // This notification is received when the user clicks
            // "Close"/"Cancel"
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Dialog cancelled by user\n")));
            SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR);
            break; 
            }

        }


    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgChpassKeyfileWizard_HandleMsg_WM_NOTIFY\n")));
    return TRUE;
}


// =========================================================================
// This function is required in order to get the WinCE look & feel to the
// tabbed dialog.
int CALLBACK dlgChpassKeyfileWizard_PropSheetProc(
  HWND hwndDlg, 
  UINT uMsg, 
  LPARAM lParam 
)
{
    int retval = 0;
    switch (uMsg)
        {
        case PSCB_GETVERSION:
            {
            // We do *NOT* set the version here. The resize causes the page
            // to be displayed *over* the property sheet's tabs. Setting
            // this version prevents this from working correctly
            retval = COMCTL32_VERSION;
            break; 
            }

        }

    return retval;
}


// =========================================================================
HWND _dlgChpassKeyfileWizard_CreateDialogWindow(
    HWND ParentHWND, 
    int ResourceID
)
{
    DLGTEMPLATE* dlgtempl;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -