dlgbackuprestore.c

来自「文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2」· C语言 代码 · 共 576 行 · 第 1/2 页

C
576
字号
// Description: 
// By Sarah Dean
// Email: sdean12@sdean12.org
// WWW:   http://www.FreeOTFE.org/
//
// -----------------------------------------------------------------------------
//

#include "main.h"
#include "dlgBackupRestore.h"
#include "FreeOTFEDebug.h"
#include "FreeOTFElib.h"
#include "FreeOTFEGUIlib.h"
#include "FreeOTFE4PDAlib.h"
#include "DriverInterface.h"
#include "DriverInterfaceTwo.h"
#include "DriverInterfaceCommon.h"

#include "resource.h"

#include "SDUGeneral.h"

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


// Local to this file...
HWND G_dlgBackupRestore_MenuBar = NULL;


// =========================================================================
// Enums...

// Mode
typedef enum _DLG_MODE_BACKUPRESTORE {
    DLGMODE_BACKUPRESTORE_BACKUP   =    1,
    DLGMODE_BACKUPRESTORE_RESTORE  =    2
} DLG_BACKUPRESTORE, *PDLG_BACKUPRESTORE;


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

typedef struct _BACKUPRESTORE_PARAMETERS {
    BOOL ParamsOK;

    WCHAR SrcFilename[FREEOTFE_MAX_FILENAME_LENGTH];
    LARGE_INTEGER SrcOffset;
    WCHAR DestFilename[FREEOTFE_MAX_FILENAME_LENGTH];
    LARGE_INTEGER DestOffset;

} BACKUPRESTORE_PARAMETERS, *PBACKUPRESTORE_PARAMETERS;


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

DLG_BACKUPRESTORE G_dlgBackupRestore_DlgMode;
BACKUPRESTORE_PARAMETERS G_dlgBackupRestore_Params;

// =========================================================================
// Forward declarations...
BOOL CALLBACK dlgBackupRestore_Proc(
                           HWND hDlg, 
                           UINT message, 
                           WPARAM wParam, 
                           LPARAM lParam
                          );

void _DisplayDlgBackupRestore(HWND hWnd);


// =========================================================================
void DisplayDlgBackup(HWND hWnd)
{
	G_dlgBackupRestore_DlgMode = DLGMODE_BACKUPRESTORE_BACKUP;
	_DisplayDlgBackupRestore(hWnd);
}


// =========================================================================
void DisplayDlgRestore(HWND hWnd)
{
	G_dlgBackupRestore_DlgMode = DLGMODE_BACKUPRESTORE_RESTORE;
	_DisplayDlgBackupRestore(hWnd);
}


// =========================================================================
void _DisplayDlgBackupRestore(HWND hWnd)
{
    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("_DisplayDlgBackupRestore\n")));
    DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Displaying \"Backup/restore...\" dialog\n")));

    DialogBox(
              G_hInstance, 
              MAKEINTRESOURCE(IDD_BACKUPRESTORE), 
              hWnd, 
              (DLGPROC)dlgBackupRestore_Proc
             );

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


// =========================================================================
BOOL CALLBACK dlgBackupRestore_HandleMsg_WM_INITDIALOG(HWND hDlg)
{
    SHINITDLGINFO shidi;

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

    shidi.dwMask = SHIDIM_FLAGS;
    shidi.dwFlags = (
                     SHIDIF_DONEBUTTON | 
                     SHIDIF_SIPDOWN | 
                     SHIDIF_SIZEDLGFULLSCREEN
                    );
    shidi.hDlg = hDlg;
    SHInitDialog(&shidi);

    G_dlgBackupRestore_MenuBar = SetupMenu(hDlg, IDR_MENU_DONECANCEL);


    // Populate display...
	if (G_dlgBackupRestore_DlgMode == DLGMODE_BACKUPRESTORE_BACKUP)
		{
		SetDlgItemText(hDlg, IDC_GROUP_SRC, TEXT("Volume details"));
        SetStaticText(hDlg, IDC_STATIC_SRCFILENAME, TEXT("Volume:"));

		SetDlgItemText(hDlg, IDC_GROUP_DEST, TEXT("Backup details"));
        SetStaticText(hDlg, IDC_STATIC_DESTFILENAME, TEXT("Backup:"));

		SetControlEnabled(hDlg, IDC_STATIC_DESTOFFSET, FALSE);
		SetControlEnabled(hDlg, IDC_EDIT_DESTOFFSET, FALSE);
		SetControlEnabled(hDlg, IDC_SPIN_DESTOFFSET, FALSE);
		}
	else
		{
		SetDlgItemText(hDlg, IDC_GROUP_SRC, TEXT("Backup details"));
        SetStaticText(hDlg, IDC_STATIC_SRCFILENAME, TEXT("Backup:"));

		SetControlEnabled(hDlg, IDC_STATIC_SRCOFFSET, FALSE);
		SetControlEnabled(hDlg, IDC_EDIT_SRCOFFSET, FALSE);
		SetControlEnabled(hDlg, IDC_SPIN_SRCOFFSET, FALSE);

        SetDlgItemText(hDlg, IDC_GROUP_DEST, TEXT("Volume details"));
        SetStaticText(hDlg, IDC_STATIC_DESTFILENAME, TEXT("Volume:"));
		}

	SetDlgItemInt(hDlg, IDC_EDIT_SRCOFFSET, 0, FALSE);
	SetDlgItemInt(hDlg, IDC_EDIT_DESTOFFSET, 0, FALSE);

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


// =========================================================================
BOOL CALLBACK dlgBackupRestore_HandleMsg_WM_CLOSE(HWND hWnd)
{
    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgBackupRestore_HandleMsg_WM_CLOSE\n")));
    if (G_dlgBackupRestore_MenuBar != NULL)
        {
        DestroyWindow(G_dlgBackupRestore_MenuBar);
        G_dlgBackupRestore_MenuBar = NULL;
        }
    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgBackupRestore_HandleMsg_WM_CLOSE\n")));
    return TRUE;
}


// =========================================================================
void
dlgBackupRestore_GetParams(HWND hDlg)
{
	// Source file details...
    GetDlgItemText( 
                   hDlg, 
                   IDC_EDIT_SRCFILENAME,
                   G_dlgBackupRestore_Params.SrcFilename,
                   sizeof(G_dlgBackupRestore_Params.SrcFilename)
                 ); 
    G_dlgBackupRestore_Params.SrcOffset.QuadPart = GetDlgItemInt(
                                              hDlg,
                                              IDC_EDIT_SRCOFFSET,
                                              NULL,
                                              FALSE
                                             );

	// Destination file details...
	GetDlgItemText( 
                   hDlg, 
                   IDC_EDIT_DESTFILENAME,
                   G_dlgBackupRestore_Params.DestFilename,
                   sizeof(G_dlgBackupRestore_Params.DestFilename)
                 ); 
    G_dlgBackupRestore_Params.DestOffset.QuadPart = GetDlgItemInt(
                                              hDlg,
                                              IDC_EDIT_DESTOFFSET,
                                              NULL,
                                              FALSE
                                             );
}


// =========================================================================
BOOL
dlgBackupRestore_ValidateInput(HWND hDlg)
{
	BOOL retval;
    BOOL fileExists;
    WCHAR* volFilename;
    LARGE_INTEGER volOffset;
    LARGE_INTEGER volFilesize;

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

	retval = TRUE;

	dlgBackupRestore_GetParams(hDlg);

	if (retval)
	    {
        retval = CheckFileExists(G_dlgBackupRestore_Params.SrcFilename);

        if (!(retval))
            {
            if (G_dlgBackupRestore_DlgMode == DLGMODE_BACKUPRESTORE_BACKUP)
                {
                MsgError(hDlg, TEXT("Volume file to backup from does not exist"));
                }
            else
                {
                MsgError(hDlg, TEXT("CDB backup file does not exist"));
                }
            }
        }

	if (retval)
	    {
        fileExists = CheckFileExists(G_dlgBackupRestore_Params.DestFilename);

        if (
            (G_dlgBackupRestore_DlgMode == DLGMODE_BACKUPRESTORE_BACKUP) &&
            (fileExists)
           )
            {
            MsgError(hDlg, TEXT("CDB backup file already exists; please specify a different filename to backup to"));
            retval = FALSE;
            }
        else if (
                 (G_dlgBackupRestore_DlgMode == DLGMODE_BACKUPRESTORE_RESTORE) &&
                 (!(fileExists))
                )
            {
            MsgError(hDlg, TEXT("Volume file to restore to does not exist"));
            retval = FALSE;
            }
        }

    if (retval)
        {
        if (G_dlgBackupRestore_DlgMode == DLGMODE_BACKUPRESTORE_BACKUP)
            {
            volFilename = G_dlgBackupRestore_Params.SrcFilename;
            volOffset = G_dlgBackupRestore_Params.SrcOffset;
            }
        else
            {
            volFilename = G_dlgBackupRestore_Params.DestFilename;
            volOffset = G_dlgBackupRestore_Params.DestOffset;
            }

        retval = GetFileSize_Filename(
                               volFilename,
                               &volFilesize
                              );
        if (!(retval))
            {
            MsgError(hDlg, TEXT("Unable to get file size of volume file"));
            }
        else
            {
            if ((volOffset.QuadPart + (CRITICAL_DATA_LENGTH / 8)) >

⌨️ 快捷键说明

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