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

📄 dlgproperties.c

📁 文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2, MD4, MD5, RIPEMD-128, RIPEMD-160, SHA-1, SHA-224, SHA-256,
💻 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 + -