📄 additionaldecryption.c
字号:
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: AdditionalDecryption.c,v 1.13 2002/10/07 16:20:09 wjb Exp $
____________________________________________________________________________*/
#include <windows.h>
#include "PGPadmin.h"
#include <commctrl.h>
#include "resource.h"
#include "Utils.h"
#include "keydrawitem.h"
#include "PGPadminHelp.h"
#include "pgpClientLib.h"
#define MSG_CORRECTLISTBOX WM_APP + 1
static int nCurSel = 0;
static void sInitGUI(HWND hwndDlg, pgpConfigInfo *pConfig, BOOL bResetKeys);
static BOOL sSaveSelection(HWND hwndDlg, pgpConfigInfo *pConfig);
static DWORD aHelpIds[] = {
IDC_ADK_TYPE, IDH_PGPADMIN_ADK_TYPE,
IDC_ENABLE_ADK, IDH_PGPADMIN_ENABLEADK,
IDC_ENFORCE_ADK, IDH_PGPADMIN_ENFORCEADK,
IDC_ADK_ID, IDH_PGPADMIN_ADK_ID,
IDC_ENFORCE_REMOTEADK, IDH_PGPADMIN_ENFORCE_REMOTEADK,
IDC_ADKENABLED, -1,
IDC_ADK_LABEL, -1,
0,0
};
HFONT g_hFont;
BOOL CALLBACK ADKDlgProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
pgpConfigInfo * pConfig = NULL;
HWND hList;
g_hCurrentDlgWnd = hwndDlg;
pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA);
hList = GetDlgItem(hwndDlg, IDC_ADK_ID);
switch(uMsg)
{
case WM_INITDIALOG:
{
int nIndex;
char szString[255];
CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA);
LoadString(g_hInstance, IDS_INCOMINGMSG, szString, 254);
nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_ADDSTRING,
0, (LPARAM) szString);
SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETITEMDATA, nIndex,
(LPARAM) IDS_INCOMINGMSG);
LoadString(g_hInstance, IDS_OUTGOINGMSG, szString, 254);
nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_ADDSTRING,
0, (LPARAM) szString);
SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETITEMDATA, nIndex,
(LPARAM) IDS_OUTGOINGMSG);
LoadString(g_hInstance, IDS_PGPDISK, szString, 254);
nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_ADDSTRING,
0, (LPARAM) szString);
SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETITEMDATA, nIndex,
(LPARAM) IDS_PGPDISK);
SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETCURSEL, 0, 0);
// Property sheets use bad unicode font, so we must set
// it ourselves for listviews
g_hFont=SetUTF8Font(GetDlgItem(hwndDlg,IDC_ADK_ID));
sInitGUI(hwndDlg, pConfig, TRUE);
break;
}
case WM_DRAWITEM:
{
KeyDrawItem((LPDRAWITEMSTRUCT) lParam);
return TRUE;
}
case WM_DESTROY:
FreeKeyring(hwndDlg, IDC_ADK_ID);
DeleteObject(g_hFont);
break;
case WM_HELP:
case WM_CONTEXTMENU:
return PGPclHtmlHelp (hwndDlg, uMsg, wParam, lParam,
(char *) kPGPclAdminHelpFile, aHelpIds);
case MSG_CORRECTLISTBOX:
switch (nCurSel)
{
case IDS_INCOMINGMSG:
SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETCURSEL, 0, 0);
break;
case IDS_OUTGOINGMSG:
SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETCURSEL, 1, 0);
break;
case IDS_PGPDISK:
SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETCURSEL, 2, 0);
break;
}
bReturnCode = TRUE;
break;
case WM_NOTIFY:
{
LPNMHDR pnmh;
pnmh = (LPNMHDR) lParam;
switch(pnmh->code)
{
case PSN_HELP:
PGPclHtmlHelp (hwndDlg, kPGPclHelpContext, 0, 0,
(char *) kPGPclAdminHelpFile,
(DWORD *) IDH_PGPADMIN_ADKDIALOG);
break;
case PSN_KILLACTIVE:
{
if (!sSaveSelection(hwndDlg, pConfig))
SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
bReturnCode = TRUE;
break;
}
case NM_CLICK:
case TVN_KEYDOWN:
if (pnmh->idFrom == IDC_ADK_ID)
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
bReturnCode = CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
break;
default:
bReturnCode = CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
break;
}
break;
}
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_ADK_TYPE:
switch (HIWORD(wParam))
{
case CBN_SELENDOK:
if (sSaveSelection(hwndDlg, pConfig))
sInitGUI(hwndDlg, pConfig, TRUE);
else
PostMessage(hwndDlg, MSG_CORRECTLISTBOX, 0, 0);
bReturnCode = TRUE;
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
break;
case IDC_ENFORCE_REMOTEADK:
{
if (IsDlgButtonChecked(hwndDlg, IDC_ENFORCE_REMOTEADK) ==
BST_CHECKED)
{
pConfig->bEnforceRemoteADK = TRUE;
}
else
{
pConfig->bEnforceRemoteADK = FALSE;
}
bReturnCode = TRUE;
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
case IDC_ENABLE_ADK:
{
int nIndex;
PGPBoolean bUseADK;
if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ADK) ==
BST_CHECKED)
{
bUseADK = TRUE;
}
else
{
bUseADK = FALSE;
}
nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE,
CB_GETCURSEL, 0, 0);
nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE,
CB_GETITEMDATA, nIndex, 0);
switch (nIndex)
{
case IDS_INCOMINGMSG:
pConfig->bUseIncomingADK = bUseADK;
if (!bUseADK)
pConfig->bEnforceIncomingADK = FALSE;
break;
case IDS_OUTGOINGMSG:
pConfig->bUseOutgoingADK = bUseADK;
if (!bUseADK)
pConfig->bEnforceOutgoingADK = FALSE;
break;
case IDS_PGPDISK:
pConfig->bUseDiskADK = bUseADK;
break;
}
sInitGUI(hwndDlg, pConfig, FALSE);
bReturnCode = TRUE;
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
case IDC_ENFORCE_ADK:
{
int nIndex;
PGPBoolean bEnforceADK;
if (IsDlgButtonChecked(hwndDlg, IDC_ENFORCE_ADK) ==
BST_CHECKED)
{
bEnforceADK = TRUE;
}
else
{
bEnforceADK = FALSE;
}
nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE,
CB_GETCURSEL, 0, 0);
nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE,
CB_GETITEMDATA, nIndex, 0);
switch (nIndex)
{
case IDS_INCOMINGMSG:
pConfig->bEnforceIncomingADK = bEnforceADK;
break;
case IDS_OUTGOINGMSG:
pConfig->bEnforceOutgoingADK = bEnforceADK;
break;
}
bReturnCode = TRUE;
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
}
break;
default:
bReturnCode = CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
break;
}
return(bReturnCode);
}
static void sInitGUI(HWND hwndDlg, pgpConfigInfo *pConfig, BOOL bResetKeys)
{
int nIndex;
PGPBoolean bUseADK;
PGPBoolean bEnforceADK;
char szFormat[255];
char szType[255];
char szString[255];
HWND hList;
hList = GetDlgItem(hwndDlg, IDC_ADK_TYPE);
nIndex = SendMessage(hList, CB_GETCURSEL, 0, 0);
SendMessage(hList, CB_GETLBTEXT, nIndex, (LPARAM) &szType);
nIndex = SendMessage(hList, CB_GETITEMDATA, nIndex, 0);
nCurSel = nIndex;
LoadString(g_hInstance, IDS_ENABLEADK, szFormat, 254);
wsprintf(szString, szFormat, szType);
SetWindowText(GetDlgItem(hwndDlg, IDC_ENABLE_ADK), szString);
LoadString(g_hInstance, IDS_ENFORCEADK, szFormat, 254);
wsprintf(szString, szFormat, szType);
SetWindowText(GetDlgItem(hwndDlg, IDC_ENFORCE_ADK), szString);
LoadString(g_hInstance, IDS_ADKLABEL, szFormat, 254);
wsprintf(szString, szFormat, szType);
SetWindowText(GetDlgItem(hwndDlg, IDC_ADK_LABEL), szString);
LoadString(g_hInstance, IDS_ADKENABLED, szString, 254);
strcat(szString, "\r\n ");
if (pConfig->bUseIncomingADK)
{
LoadString(g_hInstance, IDS_INCOMINGMSG, szFormat, 254);
strcat(szString, szFormat);
strcat(szString, "\r\n ");
}
if (pConfig->bUseOutgoingADK)
{
LoadString(g_hInstance, IDS_OUTGOINGMSG, szFormat, 254);
strcat(szString, szFormat);
strcat(szString, "\r\n ");
}
if (pConfig->bUseDiskADK)
{
LoadString(g_hInstance, IDS_PGPDISK, szFormat, 254);
strcat(szString, szFormat);
strcat(szString, "\r\n ");
}
SetWindowText(GetDlgItem(hwndDlg, IDC_ADKENABLED), szString);
switch (nIndex)
{
case IDS_INCOMINGMSG:
bUseADK = pConfig->bUseIncomingADK;
bEnforceADK = pConfig->bEnforceIncomingADK;
ShowWindow(GetDlgItem(hwndDlg, IDC_ENFORCE_ADK), SW_SHOW);
if (bResetKeys)
{
ShowKeyring(hwndDlg, IDC_ADK_ID, pConfig->pgpContext,
pConfig->keyDB, NULL, FALSE, TRUE, TRUE, FALSE);
SelectKeys(hwndDlg, IDC_ADK_ID, 1, &(pConfig->incomingADKID));
}
break;
case IDS_OUTGOINGMSG:
bUseADK = pConfig->bUseOutgoingADK;
bEnforceADK = pConfig->bEnforceOutgoingADK;
ShowWindow(GetDlgItem(hwndDlg, IDC_ENFORCE_ADK), SW_SHOW);
if (bResetKeys)
{
ShowKeyring(hwndDlg, IDC_ADK_ID, pConfig->pgpContext,
pConfig->keyDB, NULL, TRUE, TRUE, TRUE, FALSE);
SelectKeys(hwndDlg, IDC_ADK_ID, 1, &(pConfig->outgoingADKID));
}
break;
case IDS_PGPDISK:
bUseADK = pConfig->bUseDiskADK;
ShowWindow(GetDlgItem(hwndDlg, IDC_ENFORCE_ADK), SW_HIDE);
if (bResetKeys)
{
ShowKeyring(hwndDlg, IDC_ADK_ID, pConfig->pgpContext,
pConfig->keyDB, NULL, TRUE, TRUE, TRUE, FALSE);
SelectKeys(hwndDlg, IDC_ADK_ID, 1, &(pConfig->diskADKID));
}
break;
}
if (bUseADK)
CheckDlgButton(hwndDlg, IDC_ENABLE_ADK, BST_CHECKED);
else
{
CheckDlgButton(hwndDlg, IDC_ENABLE_ADK, BST_UNCHECKED);
ListView_SetItemState(GetDlgItem(hwndDlg, IDC_ADK_ID), -1, 0,
LVIS_SELECTED);
}
EnableWindow(GetDlgItem(hwndDlg, IDC_ENFORCE_ADK), bUseADK);
EnableWindow(GetDlgItem(hwndDlg, IDC_ADK_LABEL), bUseADK);
EnableWindow(GetDlgItem(hwndDlg, IDC_ADK_ID), bUseADK);
if (bEnforceADK)
CheckDlgButton(hwndDlg, IDC_ENFORCE_ADK, BST_CHECKED);
else
CheckDlgButton(hwndDlg, IDC_ENFORCE_ADK, BST_UNCHECKED);
if (pConfig->bEnforceRemoteADK)
CheckDlgButton(hwndDlg, IDC_ENFORCE_REMOTEADK, BST_CHECKED);
else
CheckDlgButton(hwndDlg, IDC_ENFORCE_REMOTEADK, BST_UNCHECKED);
UpdateWindow(hwndDlg);
return;
}
static BOOL sSaveSelection(HWND hwndDlg, pgpConfigInfo *pConfig)
{
int nIndex;
LV_ITEM lviKey;
PGPKeyID *pConfigKeyID;
PGPKeyID *pKeyID;
HWND hList;
BOOL bUseADK;
BOOL bSaveOK = TRUE;
nIndex = nCurSel;
switch (nIndex)
{
case IDS_INCOMINGMSG:
pConfigKeyID = &(pConfig->incomingADKID);
bUseADK = pConfig->bUseIncomingADK;
break;
case IDS_OUTGOINGMSG:
pConfigKeyID = &(pConfig->outgoingADKID);
bUseADK = pConfig->bUseOutgoingADK;
break;
case IDS_PGPDISK:
pConfigKeyID = &(pConfig->diskADKID);
bUseADK = pConfig->bUseDiskADK;
break;
}
hList = GetDlgItem(hwndDlg, IDC_ADK_ID);
// Save user data for this page
nIndex = ListView_GetNextItem(hList, -1, LVNI_SELECTED);
if (nIndex > -1)
{
lviKey.mask = LVIF_PARAM;
lviKey.iItem = nIndex;
lviKey.iSubItem = 0;
ListView_GetItem(hList, &lviKey);
pKeyID = (PGPKeyID *) lviKey.lParam;
memcpy(pConfigKeyID->opaqueBytes, pKeyID->opaqueBytes,
sizeof(pKeyID->opaqueBytes));
}
else if (bUseADK)
{
char szErrorMsg[255];
char szTitle[255];
LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
LoadString(g_hInstance, IDS_E_SELECTKEY, szErrorMsg, 254);
MessageBox(hwndDlg, szErrorMsg, szTitle, MB_ICONEXCLAMATION);
SetFocus(GetDlgItem(hwndDlg, IDC_ADK_ID));
bSaveOK = FALSE;
}
if (bSaveOK)
{
nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_GETCURSEL, 0, 0);
nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_GETITEMDATA,
nIndex, 0);
nCurSel = nIndex;
}
return bSaveOK;
}
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -