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

📄 dlgmount.c

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