wndmain.c
来自「文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2」· C语言 代码 · 共 1,763 行 · 第 1/4 页
C
1,763 行
}
else
{
MsgInfo(hWnd, TEXT("One or more of volumes could not be dismounted."));
}
}
// =========================================================================
void _wndMain_DismountSelected(HWND hWnd)
{
UINT itemCount;
UINT i;
WCHAR mountpoint[FREEOTFE_MAX_FILENAME_LENGTH];
BOOL allOK;
HCURSOR csrHourglass;
HCURSOR csrPrevious;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("_wndMain_DismountSelected\n")));
itemCount = ListView_GetItemCount(G_hWndListView);
for (i = 0; i < itemCount; i++)
{
if (ListView_GetItemState(
G_hWndListView,
i,
LVIS_SELECTED
) == LVIS_SELECTED)
{
ListView_GetItemText(
G_hWndListView,
i,
COL_IDX_MOUNTPOINT,
mountpoint,
sizeof(mountpoint)
);
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Dismount mountpoint: %ls\n"), mountpoint));
csrHourglass = LoadCursor(NULL, IDC_WAIT);
csrPrevious = SetCursor(csrHourglass);
allOK = driver_Dismount(mountpoint, FALSE);
wndMain_RefreshList(hWnd);
SetCursor(csrPrevious);
// Try normal (unforced) dismount...
if (allOK)
{
MsgInfo(hWnd, TEXT("Volume dismounted."));
}
else
{
MsgInfo(hWnd, TEXT("Dismount failed."));
}
}
}
SecZeroMemory(mountpoint, sizeof(mountpoint));
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("_wndMain_DismountSelected\n")));
}
// =========================================================================
void _wndMain_PropertiesSelected(HWND hWnd)
{
UINT itemCount;
UINT i;
WCHAR mountpoint[FREEOTFE_MAX_FILENAME_LENGTH];
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("_wndMain_PropertiesSelected\n")));
itemCount = ListView_GetItemCount(G_hWndListView);
for (i = 0; i < itemCount; i++)
{
if (ListView_GetItemState(
G_hWndListView,
i,
LVIS_SELECTED
) == LVIS_SELECTED)
{
ListView_GetItemText(
G_hWndListView,
i,
COL_IDX_MOUNTPOINT,
mountpoint,
sizeof(mountpoint)
);
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Properties of mountpoint: %ls\n"), mountpoint));
DisplayDlgProperties(hWnd, mountpoint);
}
}
SecZeroMemory(mountpoint, sizeof(mountpoint));
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("_wndMain_PropertiesSelected\n")));
}
// =========================================================================
void _wndMain_ExploreSelected()
{
UINT itemCount;
UINT i;
WCHAR mountpoint[FREEOTFE_MAX_FILENAME_LENGTH];
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("_wndMain_ExploreSelected\n")));
itemCount = ListView_GetItemCount(G_hWndListView);
for (i = 0; i < itemCount; i++)
{
if (ListView_GetItemState(
G_hWndListView,
i,
LVIS_SELECTED
) == LVIS_SELECTED)
{
ListView_GetItemText(
G_hWndListView,
i,
COL_IDX_MOUNTPOINT,
mountpoint,
sizeof(mountpoint)
);
ExploreMountpoint(mountpoint);
}
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("_wndMain_ExploreSelected\n")));
}
// =========================================================================
BOOL CALLBACK wndMain_HandleMsg_WM_NOTIFY(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
BOOL retval = FALSE;
int idCtrl;
NMHDR* notifHdr;
DEBUGOUTGUI(DEBUGLEV_VERBOSE_ENTER, (TEXT("wndMain_HandleMsg_WM_NOTIFY\n")));
idCtrl = (int)wParam;
notifHdr = (NMHDR*)lParam;
switch (notifHdr->code)
{
case NM_DBLCLK:
{
switch(idCtrl)
{
case IDC_MAIN_LISTVIEW:
{
_wndMain_ExploreSelected();
retval = TRUE;
break;
}
}
break;
}
// List view item changed (e.g. selection changed)
case LVN_ITEMCHANGED:
{
switch(idCtrl)
{
case IDC_MAIN_LISTVIEW:
{
EnableDisableControls();
retval = TRUE;
break;
}
}
break;
}
}
DEBUGOUTGUI(DEBUGLEV_VERBOSE_EXIT, (TEXT("wndMain_HandleMsg_WM_NOTIFY\n")));
return retval;
}
// =========================================================================
LRESULT CALLBACK wndMain_HandleMsg_WM_COMMAND(
HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam
)
{
LRESULT retval = 0;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("wndMain_HandleMsg_WM_COMMAND\n")));
switch(LOWORD(wParam))
{
#ifdef FREEOTFE_STATS
case ID_STATS_REPORT:
{
WCHAR ourFilename[FREEOTFE_MAX_FILENAME_LENGTH];
WCHAR* uncMachine;
WCHAR* drive;
WCHAR* path;
WCHAR* filename;
WCHAR* fileExtension;
HCURSOR csrHourglass;
HCURSOR csrPrevious;
SHELLEXECUTEINFO seInfo;
MsgInfo(hWnd, TEXT("About to generate stats report.\n\nPlease ensure PDA isn't running on battery power and tap \"OK\" to begin."));
csrHourglass = LoadCursor(NULL, IDC_WAIT);
csrPrevious = SetCursor(csrHourglass);
// We dump our report into the "CWD" (the directory in which this
// executable is located
GetModuleFileName(
NULL,
ourFilename,
(sizeof(ourFilename) / sizeof(ourFilename[0]))
);
SDUParsePath(
ourFilename,
&uncMachine,
&drive,
&path,
&filename,
&fileExtension
);
wcsncpy(
filename,
STATS_REPORT_FILE,
(
(sizeof(ourFilename) - (filename - path)) /
sizeof(ourFilename[0])
)
);
GenerateDriverStatsReport(ourFilename);
SetCursor(csrPrevious);
if (MessageBox(
hWnd,
TEXT("Stats report generated.\n\nDo you wish to view the report 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 = ourFilename;
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,
ourFilename,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
NULL,
NULL
);
*/
}
break;
}
#endif
#ifdef DEBUG
case ID_TEST_TEST_XXX_1:
{
TestOne(hWnd);
break;
}
case ID_TEST_TEST_XXX_2:
{
TestTwo(hWnd);
break;
}
case ID_TEST_TEST_XXX_3:
{
TestThree(hWnd);
break;
}
#endif
case ID_FILE_EXIT:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_FILE_EXIT\n")));
PostMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
case ID_FILE_NEWVOL:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_FILE_NEWVOL\n")));
MsgInfo(hWnd, TEXT("Please note: If you wish to create a new volume for use on both PDAs and PCs, please do so using the PC version of FreeOTFE.\n\nSee documentation for further explanation."));
DisplayDlgNewVolWizard(hWnd);
break;
}
case ID_FILE_MOUNT:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_FILE_MOUNT\n")));
DisplayDlgMount(hWnd);
wndMain_RefreshList(hWnd);
break;
}
case ID_FILE_DISMOUNT:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_FILE_DISMOUNT\n")));
_wndMain_DismountSelected(hWnd);
break;
}
case ID_FILE_DISMOUNTALL:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_FILE_DISMOUNTALL\n")));
_wndMain_DismountAll(hWnd);
break;
}
case ID_VIEW_PROPERTIES:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_VIEW_PROPERTIES\n")));
_wndMain_PropertiesSelected(hWnd);
break;
}
case ID_VIEW_OPTIONS:
{
BOOL prevLargeIcons;
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_VIEW_OPTIONS\n")));
prevLargeIcons = G_Options->LargeIcons;
DisplayDlgOptions(hWnd);
// If the user changed the large/small icons option, setup
// the list display again
if (prevLargeIcons != G_Options->LargeIcons)
{
wndMain_SetupIconSize();
wndMain_RefreshList(hWnd);
}
break;
}
case ID_VIEW_REFRESH:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_VIEW_REFRESH\n")));
wndMain_RefreshList(hWnd);
break;
}
case ID_TOOLS_CREATEKEYFILE:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_TOOLS_CREATEKEYFILE\n")));
DisplayDlgKeyfileWizard(hWnd);
break;
}
case ID_TOOLS_CHANGEPASSWORD:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_TOOLS_CHANGEDETAILS\n")));
DisplayDlgChpassWizard(hWnd);
break;
}
case ID_TOOLS_CDBBACKUP:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_TOOLS_CDBBACKUP\n")));
DisplayDlgBackup(hWnd);
break;
}
case ID_TOOLS_CDBRESTORE:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_TOOLS_CDBRESTORE\n")));
DisplayDlgRestore(hWnd);
break;
}
case ID_TOOLS_CDBDUMP:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_TOOLS_CDBDUMP\n")));
DisplayDlgDumpCDBWizard(hWnd);
break;
}
case ID_HELP_ABOUT:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_HELP_ABOUT\n")));
DisplayDlgAbout(hWnd);
break;
}
case ID_CONTEXTMENU_EXPLORE:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_CONTEXTMENU_EXPLORE\n")));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?