📄 dlgproperties.c
字号:
// Description:
// By Sarah Dean
// Email: sdean12@sdean12.org
// WWW: http://www.FreeOTFE.org/
//
// -----------------------------------------------------------------------------
//
#include "main.h"
#include "dlgProperties.h"
#include "FreeOTFEDebug.h"
#include "FreeOTFElib.h"
#include "FreeOTFEGUIlib.h"
#include "DriverInterface.h"
#include "DriverInterfaceTwo.h"
#include "DriverInterfaceHash.h"
#include "DriverInterfaceCypher.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 <aygshell.h> // Required for SH... functions/definitions/etc
#pragma comment(lib, "aygshell") // Link in aygshell.lib
// Local to this file...
HWND G_dlgProperties_MenuBar = NULL;
WCHAR* G_dlgProperties_Mountpoint = NULL;
// =========================================================================
// Forward declarations...
BOOL CALLBACK dlgProperties_Proc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
// =========================================================================
void DisplayDlgProperties(HWND hWnd, WCHAR* mountpoint)
{
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("DisplayDlgProperties\n")));
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Displaying \"Properties...\" dialog\n")));
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Mountpoint: %ls\n"), mountpoint));
G_dlgProperties_Mountpoint = calloc(
// +1 for terminating NULL
(wcslen(mountpoint) + 1),
sizeof(*mountpoint)
);
if (G_dlgProperties_Mountpoint == NULL)
{
DEBUGOUTGUI(DEBUGLEV_ERROR, (TEXT("Unable to malloc storage to hold mountpoint\n")));
MsgOutOfMemory(hWnd);
}
else
{
wcscpy(G_dlgProperties_Mountpoint, mountpoint);
DialogBox(
G_hInstance,
MAKEINTRESOURCE(IDD_PROPERTIES),
hWnd,
(DLGPROC)dlgProperties_Proc
);
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("DisplayDlgProperties\n")));
}
// =========================================================================
BOOL CALLBACK dlgProperties_HandleMsg_WM_INITDIALOG(HWND hDlg)
{
SHINITDLGINFO shidi;
DIOC_DISK_DEVICE_STATUS volumeDetails;
HASH hashInfo;
CYPHER cypherInfo;
WCHAR strPrettyTitleHash[MAX_PRETTYPRINTED_TITLE];
WCHAR strPrettyTitleCypher[MAX_PRETTYPRINTED_TITLE];
WCHAR strPrettySectorIVGenMethod[MAX_PRETTYPRINTED_SECTORIVGENMETHOD];
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgProperties_HandleMsg_WM_INITDIALOG\n")));
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = (
SHIDIF_DONEBUTTON |
SHIDIF_SIPDOWN |
SHIDIF_SIZEDLGFULLSCREEN
);
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
G_dlgProperties_MenuBar = SetupMenu(hDlg, IDR_MENU_NULL);
// Populate display...
SetDlgItemText(hDlg, IDC_EDIT_PROP_MOUNTPOINT, G_dlgProperties_Mountpoint);
if (!(driver_GetVolumeInfo_Mountpoint(
G_dlgProperties_Mountpoint,
&volumeDetails
)))
{
DEBUGOUTGUI(DEBUGLEV_ERROR, (TEXT("Unable to get properties for mountpoint\n")));
MsgError(hDlg, TEXT("Unable to get volume properties."));
}
else
{
SetDlgItemText(hDlg, IDC_EDIT_PROP_VOLUME, volumeDetails.Filename);
if (volumeDetails.ReadOnly)
{
SetDlgItemText(hDlg, IDC_EDIT_PROP_MOUNTEDFOR, TEXT("Readonly"));
}
else
{
SetDlgItemText(hDlg, IDC_EDIT_PROP_MOUNTEDFOR, TEXT("Read/write"));
}
// Sector IV generation method...
driver_PrettyprintSectorIVGenMethod(
volumeDetails.SectorIVGenMethod,
strPrettySectorIVGenMethod,
sizeof(strPrettySectorIVGenMethod)
);
SetDlgItemText(
hDlg,
IDC_EDIT_PROP_SECTOR_IVS,
strPrettySectorIVGenMethod
);
// IV hash...
SetDlgItemText(hDlg, IDC_EDIT_PROP_HASH_IV, STR_UNKNOWN);
if (driver_HashGetImplDetails(
volumeDetails.IVHashDeviceName,
&(volumeDetails.IVHashGUID),
&hashInfo
))
{
memset(strPrettyTitleHash, 0, sizeof(strPrettyTitleHash));
driver_HashPrettyprintAlgTitle(
&hashInfo,
strPrettyTitleHash,
sizeof(strPrettyTitleHash)
);
SetDlgItemText(
hDlg,
IDC_EDIT_PROP_HASH_IV,
strPrettyTitleHash
);
}
// IV cypher...
SetDlgItemText(hDlg, IDC_EDIT_PROP_CYPHER_IV, STR_UNKNOWN);
if (driver_CypherGetImplDetails(
volumeDetails.IVCypherDeviceName,
&(volumeDetails.IVCypherGUID),
&cypherInfo
))
{
memset(strPrettyTitleCypher, 0, sizeof(strPrettyTitleCypher));
driver_CypherPrettyprintAlgTitle(
&cypherInfo,
strPrettyTitleCypher,
sizeof(strPrettyTitleCypher)
);
SetDlgItemText(
hDlg,
IDC_EDIT_PROP_CYPHER_IV,
strPrettyTitleCypher
);
}
// Main cypher...
SetDlgItemText(hDlg, IDC_EDIT_PROP_CYPHER_MAIN, STR_UNKNOWN);
if (driver_CypherGetImplDetails(
volumeDetails.MainCypherDeviceName,
&(volumeDetails.MainCypherGUID),
&cypherInfo
))
{
memset(strPrettyTitleCypher, 0, sizeof(strPrettyTitleCypher));
driver_CypherPrettyprintAlgTitle(
&cypherInfo,
strPrettyTitleCypher,
sizeof(strPrettyTitleCypher)
);
SetDlgItemText(
hDlg,
IDC_EDIT_PROP_CYPHER_MAIN,
strPrettyTitleCypher
);
}
SetDlgItemText(hDlg, IDC_EDIT_PROP_DEVICENAME, volumeDetails.DeviceName);
}
SecZeroMemory(&volumeDetails, sizeof(volumeDetails));
SecZeroMemory(strPrettyTitleHash, sizeof(strPrettyTitleHash));
SecZeroMemory(strPrettyTitleCypher, sizeof(strPrettyTitleCypher));
SecZeroMemory(strPrettySectorIVGenMethod, sizeof(strPrettySectorIVGenMethod));
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgProperties_HandleMsg_WM_INITDIALOG\n")));
return TRUE;
}
// =========================================================================
BOOL CALLBACK dlgProperties_HandleMsg_WM_CLOSE(HWND hWnd)
{
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgProperties_HandleMsg_WM_CLOSE\n")));
if (G_dlgProperties_MenuBar != NULL)
{
DestroyWindow(G_dlgProperties_MenuBar);
G_dlgProperties_MenuBar = NULL;
}
SecZeroAndFreeWCHARMemory(G_dlgProperties_Mountpoint);
G_dlgProperties_Mountpoint = NULL;
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgProperties_HandleMsg_WM_CLOSE\n")));
return TRUE;
}
// =========================================================================
BOOL CALLBACK dlgProperties_HandleMsg_WM_COMMAND(HWND hDlg, WPARAM wParam)
{
BOOL retval = FALSE;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgProperties_HandleMsg_WM_COMMAND\n")));
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: %d\n"), LOWORD(wParam)));
switch(LOWORD(wParam))
{
case IDOK:
{
EndDialog(hDlg, TRUE);
retval = TRUE;
break;
}
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgProperties_HandleMsg_WM_COMMAND\n")));
return retval;
}
// =========================================================================
BOOL CALLBACK dlgProperties_Proc(
HWND hDlg,
UINT msg,
WPARAM wParam,
LPARAM lParam
)
{
BOOL retval = FALSE;
switch(msg)
{
case WM_INITDIALOG:
{
retval = dlgProperties_HandleMsg_WM_INITDIALOG(hDlg);
break;
}
case WM_CLOSE:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_CLOSE\n")));
retval = dlgProperties_HandleMsg_WM_CLOSE(hDlg);
break;
}
case WM_COMMAND:
{
retval = dlgProperties_HandleMsg_WM_COMMAND(hDlg, wParam);
break;
}
}
return retval;
}
// =========================================================================
// =========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -