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 + -
显示快捷键?