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

📄 dlgdumpcdbwizard.c

📁 文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2, MD4, MD5, RIPEMD-128, RIPEMD-160, SHA-1, SHA-224, SHA-256,
💻 C
📖 第 1 页 / 共 4 页
字号:
// Description: 
// By Sarah Dean
// Email: sdean12@sdean12.org
// WWW:   http://www.FreeOTFE.org/
//
// -----------------------------------------------------------------------------
//

#include <stdlib.h>  // Required for _ultow(...)
#include <storemgr.h>  // Required for STORAGE_DEVICE_TYPE_PCCARD, etc
#include <Commdlg.h>  // Required from OPENFILENAME
#include <winuser.h>  // Required for IDOK, etc
#include <aygshell.h>  // Required for SH... functions/definitions/etc
#pragma comment(lib, "aygshell")  // Link in aygshell.lib

#include "main.h"
#include "dlgDumpCDBWizard.h"
#include "FreeOTFEDebug.h"
#include "DriverInterface.h"
#include "DriverInterfaceTwo.h"
#include "DriverInterfaceHash.h"
#include "DriverInterfaceCypher.h"
#include "DriverInterfaceCommon.h"
#include "FreeOTFElib.h"
#include "FreeOTFEGUIlib.h"
#include "FreeOTFE4PDAlib.h"
#include "FreeOTFEAPIConstsCommon.h"
#include "resource.h"
#include "SDUGeneral.h"
#include "wndUserRNG.h"


// =========================================================================
// Constants...

// Relativly arbitary marker const so we can identify tabs we created as they
// receive WM_INITDIALOG msg
#define SUBTAB_FLAG 0x0ABCDEF0

// The number of steps in the wizard
#define DUMP_CDB_WIZARD_STEPS 3

// Password change/keyfile generation...
#define PAGE_IDX_SRCFILENAME        0
#define PAGE_IDX_SRCDETAILS         1
#define PAGE_IDX_DESTFILENAME       2

#define SRCDETAILSTAB_IDX_PASSWORD   0
#define SRCDETAILSTAB_IDX_ADVANCED   1

// =========================================================================
// Structures...

// Selected RNG
typedef struct _DUMPCDB_PARAMETERS {
    BOOL ParamsOK;
    int ErrorPageIdx;

    WCHAR SrcFilename[FREEOTFE_MAX_FILENAME_LENGTH];

    unsigned char* SrcUserPassword;
    LARGE_INTEGER SrcOffset;
    unsigned int SrcSaltLength;  // In *bits*
    unsigned int SrcKeyIterations;

    WCHAR DestFilename[FREEOTFE_MAX_FILENAME_LENGTH];

} DUMPCDB_PARAMETERS, *PDUMPCDB_PARAMETERS;


// =========================================================================
// Local to this file...

HWND G_dlgDumpCDBWizard_MenuBar = NULL;
BOOL G_dlgDumpCDBWizard_PageCompleted[DUMP_CDB_WIZARD_STEPS];
DUMPCDB_PARAMETERS G_dlgDumpCDBWizard_UserParams;

BOOL G_dlgDumpCDBWizard_AllowFinish = FALSE;

HWND hDumpCDBSrcDetailsWndPassword = NULL;
HWND hDumpCDBSrcDetailsWndAdvanced = NULL;

// The last page changes depending on RNG selected
int G_dlgDumpCDBWizard_LastPageIdx = (DUMP_CDB_WIZARD_STEPS - 1);

// =========================================================================
// Forward declarations...

void _dlgDumpCDBWizard_EnableDisableControls(HWND hDlg);

BOOL CALLBACK dlgDumpCDBWizard_Finish(HWND hDlg);
BOOL CALLBACK dlgDumpCDBWizard_PropSheetProc(
                           HWND hDlg, 
                           UINT message, 
                           LPARAM lParam
                          );
BOOL CALLBACK dlgDumpCDBWizard_PropSheetPageProc(
                      HWND hDlg, 
                      UINT msg, 
                      WPARAM wParam, 
                      LPARAM lParam
                     );
void _dlgDumpCDBWizard_SecZeroParams();
BOOL dlgDumpCDBWizard_ValidatePage(HWND hDlg);
BOOL dlgDumpCDBWizard_ValidateAll(HWND hDlg);

void _dlgDumpCDBWizard_SizeWindowTab(
    HWND hTabWnd,
    HWND hWnd
);
void _dlgDumpCDBWizard_SizeWindowTab_CtrlID(
    HWND hTabParentWnd,
    int tabCtrlID,
    HWND hWnd
);
BOOL _dlgDumpCDBWizard_QuerySiblings(HWND hDlg);
int _dlgDumpCDBWizard_GetCurrPageIdx(HWND hDlg);
int _dlgDumpCDBWizard_GetPageIdxOfPage(HWND hDlg);


// =========================================================================
void DisplayDlgDumpCDBWizard(HWND hWnd)
{
    PROPSHEETHEADER propHeader;
    PROPSHEETPAGE propPage[DUMP_CDB_WIZARD_STEPS];
    int i;

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

    for (
         i = 0;
         i < (sizeof(G_dlgDumpCDBWizard_PageCompleted) / sizeof(G_dlgDumpCDBWizard_PageCompleted[0]));
         i++
        )
        {
        G_dlgDumpCDBWizard_PageCompleted[i] = FALSE;
        }

    memset(
           &G_dlgDumpCDBWizard_UserParams, 
           0,
           sizeof(G_dlgDumpCDBWizard_UserParams)
          );

    // Zero unused members...
    memset(propPage, 0, sizeof(propPage));


    // Src filename step...
    propPage[PAGE_IDX_SRCFILENAME].dwSize      = sizeof(propPage[0]);
    // Create when property sheet created, and tab caption (title)
    propPage[PAGE_IDX_SRCFILENAME].lParam      = PAGE_IDX_SRCFILENAME;
    propPage[PAGE_IDX_SRCFILENAME].dwFlags     = (PSP_PREMATURE | PSP_USETITLE);
    propPage[PAGE_IDX_SRCFILENAME].pszTitle    = TEXT("Source filename");
    propPage[PAGE_IDX_SRCFILENAME].hInstance   = G_hInstance;
    propPage[PAGE_IDX_SRCFILENAME].pszTemplate = MAKEINTRESOURCE(IDD_FILENAME);
    propPage[PAGE_IDX_SRCFILENAME].pfnDlgProc  = dlgDumpCDBWizard_PropSheetPageProc;

    // Src details step...
    propPage[PAGE_IDX_SRCDETAILS].dwSize      = sizeof(propPage[0]);
    // Create when property sheet created, and tab caption (title)
    propPage[PAGE_IDX_SRCDETAILS].lParam      = PAGE_IDX_SRCDETAILS;
    propPage[PAGE_IDX_SRCDETAILS].dwFlags     = (PSP_PREMATURE | PSP_USETITLE);
    propPage[PAGE_IDX_SRCDETAILS].pszTitle    = TEXT("Source details");
    propPage[PAGE_IDX_SRCDETAILS].hInstance   = G_hInstance;
    propPage[PAGE_IDX_SRCDETAILS].pszTemplate = MAKEINTRESOURCE(IDD_DIALOG_TAB);
    propPage[PAGE_IDX_SRCDETAILS].pfnDlgProc  = dlgDumpCDBWizard_PropSheetPageProc;

    // Dest filename step...
    propPage[PAGE_IDX_DESTFILENAME].dwSize      = sizeof(propPage[0]);
    // Create when property sheet created, and tab caption (title)
    propPage[PAGE_IDX_DESTFILENAME].lParam      = PAGE_IDX_DESTFILENAME;
    propPage[PAGE_IDX_DESTFILENAME].dwFlags     = (PSP_PREMATURE | PSP_USETITLE);
    propPage[PAGE_IDX_DESTFILENAME].pszTitle    = TEXT("Destination filename");
    propPage[PAGE_IDX_DESTFILENAME].hInstance   = G_hInstance;
    propPage[PAGE_IDX_DESTFILENAME].pszTemplate = MAKEINTRESOURCE(IDD_FILENAME);
    propPage[PAGE_IDX_DESTFILENAME].pfnDlgProc  = dlgDumpCDBWizard_PropSheetPageProc;

    // Common...
    propHeader.dwSize = sizeof (PROPSHEETHEADER);
    propHeader.dwFlags     = (
                              PSH_NOAPPLYNOW | 
                              PSH_USECALLBACK |   // Needed to get WinCE
                                                  // look & feel control
                              PSH_PROPSHEETPAGE | // Use templates not handles
                              PSH_MAXIMIZE        // All WinCE dialogs are maximised
                             );
    propHeader.pszCaption  = TEXT("Dump CDB");
    propHeader.hwndParent  = hWnd;
    propHeader.hInstance   = G_hInstance;
    propHeader.nPages      = DUMP_CDB_WIZARD_STEPS;
    propHeader.nStartPage  = 0;
    propHeader.ppsp        = propPage;
    propHeader.pfnCallback = dlgDumpCDBWizard_PropSheetProc; // Needed to get WinCE 
                                                     // look & feel control
       
    // Returns +ve value on success
    PropertySheet(&propHeader);

    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("DisplayDlgDumpCDBWizard\n")));
}                


// =========================================================================
// Give the user the option of displaying the file now.
void _dlgDumpCDBWizard_PromptDisplayDump(HWND hDlg)
{
    SHELLEXECUTEINFO seInfo;
    if (MessageBox(
                   hDlg,
                   TEXT("CDB dumped to file.\n\nDo you wish to view the human readable version now?"),
                   TEXT("Information"),
                   (MB_ICONQUESTION | MB_YESNO)
                  ) == IDYES)
        {
        // Launch viewer with stats report

        // We use ShellExecuteEx, rather than by using the executable's
        // filename and CreateProcess(...)
        seInfo.cbSize = sizeof(seInfo);
        seInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
        seInfo.hwnd = NULL;
        seInfo.lpVerb = TEXT("open");
        seInfo.lpFile = G_dlgDumpCDBWizard_UserParams.DestFilename;
        seInfo.lpParameters = NULL;
        seInfo.lpDirectory = NULL;
        seInfo.nShow = SW_SHOWNORMAL;
        seInfo.hInstApp = G_hInstance;
        // Optional fields
        seInfo.lpIDList = 0;
        seInfo.lpClass = 0;
        seInfo.hkeyClass = NULL;
        seInfo.dwHotKey = 0;
        seInfo.hIcon = NULL;
        seInfo.hProcess = NULL;

        ShellExecuteEx(&seInfo);

        /*
        This will also do the same thing, but ties it to a specific
        executable:
        CreateProcess(
                      EXE_whatever_it_is,
                      G_dlgDumpCDBWizard_UserParams.DestFilename,

                      NULL,
                      NULL,
                      FALSE,
                      0,
                      NULL,
                      NULL,
                      NULL,
                      NULL
                     );
        */
        }
}


// =========================================================================
// Returns 0 based index of current page specified
// Pass this the HWND for the *main* dialog
int _dlgDumpCDBWizard_GetCurrPageIdx(HWND hDlg)
{
    return _dlgDumpCDBWizard_GetPageIdxOfPage(PropSheet_GetCurrentPageHwnd(hDlg));
}


// =========================================================================
// Returns 0 based index of current page specified
int _dlgDumpCDBWizard_GetPageIdxOfPage(HWND hDlg)
{
    int retval;

    retval = GetWindowLong(hDlg, GWL_USERDATA);

    return retval;
}


// =========================================================================
// Returns 0 based index of the last page
int _dlgDumpCDBWizard_GetPageIdxOfLastPage()
{
    int retval;

    retval = G_dlgDumpCDBWizard_LastPageIdx;

    return retval;
}


// =========================================================================
void _dlgDumpCDBWizard_SetWizardButtons(int PageIdx)
{
    MenuButtonEnable(
                     G_dlgDumpCDBWizard_MenuBar,
                     ID_WIZ_BACK,
                     (PageIdx > 0)
                    );

    MenuButtonEnable(
                     G_dlgDumpCDBWizard_MenuBar,
                     ID_WIZ_NEXT,
                     (PageIdx < _dlgDumpCDBWizard_GetPageIdxOfLastPage())
                    );

    MenuButtonEnable(
                     G_dlgDumpCDBWizard_MenuBar,
                     IDOK,
                     // G_dlgDumpCDBWizard_AllowFinish
                     (PageIdx == _dlgDumpCDBWizard_GetPageIdxOfLastPage())
                    );

}


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


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

    // Hide all.
    _dlgDumpCDBWizard_ShowDetailsTabPage(
                                              hDumpCDBSrcDetailsWndPassword, 
                                              FALSE
                                             );
    _dlgDumpCDBWizard_ShowDetailsTabPage(
                                              hDumpCDBSrcDetailsWndAdvanced, 
                                              FALSE
                                             );

    if (CurrPage == PAGE_IDX_SRCDETAILS)
        {
        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 = hDumpCDBSrcDetailsWndPassword;
                    }
                else if (tabIdx == SRCDETAILSTAB_IDX_ADVANCED)
                    {
                    ctrlShow = hDumpCDBSrcDetailsWndAdvanced;
                    }
                }

            _dlgDumpCDBWizard_ShowDetailsTabPage(ctrlShow, TRUE);
            }
        }

}


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

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

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

    switch (notifHdr->code)
        {
        case TCN_SELCHANGE:
            {
            currPage = _dlgDumpCDBWizard_GetPageIdxOfPage(hDlg);

            if (
                (currPage == PAGE_IDX_SRCDETAILS) &&
                (idCtrl == IDC_TAB1)
               )
                {
                _dlgDumpCDBWizard_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 == hDumpCDBSrcDetailsWndAdvanced)
                        {
                        lpnmud = (NMUPDOWN*)lParam;
                        AdjustSpinControl(
                                          hDlg, 
                                          IDC_EDIT_OFFSET, 
                                          0, 
                                          INT_MAX, 
                                          -(lpnmud->iDelta)
                                         );

⌨️ 快捷键说明

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