📄 access.c
字号:
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: Access.c,v 1.38 2002/11/16 19:30:19 pbj Exp $
____________________________________________________________________________*/
#include <windows.h>
#include "PGPadmin.h"
#include <commctrl.h>
#include "resource.h"
#include "Utils.h"
#include "PGPadminHelp.h"
#include "pgpClientLib.h"
#include "pgpHotKeys.h"
#include "pgpKeyServerPrefs.h"
#include "pflPrefTypes.h"
#include "pgpClientPrefs.h"
#include "pgpNetPrefs.h"
#define IMAGE_UNCHECK 0
#define IMAGE_CHECK 1
#define IMAGE_PARTIAL 2
#define IMAGE_ITEM 3
#define LOCK_PREF_FLAGS kPGPPrefFlags_Hash | \
kPGPPrefFlags_Overwrite | \
kPGPPrefFlags_DisableGUI
#define PREFFLAGS_DISABLEGUI (nFlags & kPGPPrefFlags_DisableGUI) / \
kPGPPrefFlags_DisableGUI
#define LoadItemString(x) LoadString(g_hInstance, x, szFormat, \
sizeof(szFormat))
#define InsertItemInTree(x,y) tvis.item.iImage = x; \
tvis.item.iSelectedImage = x; \
tvis.item.lParam = y; \
if (tvis.hParent != NULL) \
{ \
if (x == IMAGE_CHECK) \
nCheck++; \
else if (x == IMAGE_UNCHECK) \
nUncheck++; \
} \
hItem = TreeView_InsertItem(hCtl, &tvis)
#define UpdateCatagory() tvi.hItem = tvis.hParent; \
if (nCheck) \
{ \
if (nUncheck) \
tvi.iImage = IMAGE_PARTIAL; \
else \
tvi.iImage = IMAGE_CHECK; \
} \
else \
tvi.iImage = IMAGE_UNCHECK; \
tvi.iSelectedImage = tvi.iImage; \
TreeView_SetItem(hCtl, &tvi); \
nCheck = 0; \
nUncheck = 0
static void sFillTree(HWND hwndDlg, pgpConfigInfo *pConfig);
static void sAddHotkeySequence(PGPUInt32 nHotKey, PGPBoolean *pbValue,
char *szValue);
static void sGetKeyUserID(PGPKeyDBRef keyDB, PGPByte *pData,
char *szValue, PGPSize nSize);
static void sInitGUI(HWND hwndDlg, pgpConfigInfo *pConfig);
static void sSetPrefFlag(pgpConfigInfo *pConfig, PGPUInt32 parentIndex,
PGPUInt32 prefIndex, PGPUInt32 flag);
static LPSTR sGetFileDescription(PGPMemoryMgrRef memoryMgr, LPSTR pszFile);
static DWORD aHelpIds[] = {
IDC_INCLUDEOPTIONS, IDH_PGPADMIN_INCLUDEOPTIONS,
IDC_OPTIONS, IDH_PGPADMIN_OPTIONS,
IDC_OPTIONSLABEL, -1,
0,0
};
BOOL CALLBACK AccessDlgProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
LPNMHDR lpnmh;
BOOL bReturnCode = FALSE;
pgpConfigInfo * pConfig = NULL;
PGPUInt32 panelFlags;
PGPError err;
char szWarning[1024];
char szTitle[256];
g_hCurrentDlgWnd = hwndDlg;
pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA);
switch(uMsg)
{
case WM_INITDIALOG:
CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA);
sFillTree(hwndDlg, pConfig);
sInitGUI(hwndDlg, pConfig);
bReturnCode = TRUE;
break;
case WM_HELP:
case WM_CONTEXTMENU:
return PGPclHtmlHelp (hwndDlg, uMsg, wParam, lParam,
(char *) kPGPclAdminHelpFile, aHelpIds);
case WM_NOTIFY:
lpnmh = (LPNMHDR) lParam;
switch (lpnmh->code)
{
case PSN_HELP:
PGPclHtmlHelp (hwndDlg, kPGPclHelpContext, 0, 0,
(char *) kPGPclAdminHelpFile,
(DWORD *) IDH_PGPADMIN_ACCESSDIALOG);
break;
case NM_CLICK:
case TVN_KEYDOWN:
if (lpnmh->idFrom == IDC_OPTIONS)
{
BOOL bCheck = FALSE;
HTREEITEM hItem;
if (lpnmh->code == NM_CLICK)
{
TVHITTESTINFO hitTest;
DWORD dwPos;
dwPos = GetMessagePos();
hitTest.pt.x = LOWORD(dwPos);
hitTest.pt.y = HIWORD(dwPos);
ScreenToClient(lpnmh->hwndFrom, &(hitTest.pt));
hItem = TreeView_HitTest(lpnmh->hwndFrom, &hitTest);
if (hitTest.flags & TVHT_ONITEMICON)
bCheck = TRUE;
}
if (lpnmh->code == TVN_KEYDOWN)
{
LPNMTVKEYDOWN ptvkd = (LPNMTVKEYDOWN) lParam;
if (ptvkd->wVKey == ' ')
{
hItem = TreeView_GetSelection(lpnmh->hwndFrom);
bCheck = TRUE;
}
}
if (bCheck)
{
TVITEM tvi;
HTREEITEM hParent;
tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE |
TVIF_CHILDREN | TVIF_PARAM;
tvi.hItem = hItem;
TreeView_GetItem(lpnmh->hwndFrom, &tvi);
if (tvi.iImage == IMAGE_ITEM)
break;
tvi.iImage = !tvi.iImage;
tvi.iSelectedImage = !tvi.iSelectedImage;
TreeView_SetItem(lpnmh->hwndFrom, &tvi);
tvi.mask -= TVIF_CHILDREN;
hParent = TreeView_GetParent(lpnmh->hwndFrom, hItem);
if (tvi.cChildren && !hParent)
{
HTREEITEM hChild;
PGPUInt32 nNetPref;
nNetPref = tvi.lParam;
hChild = TreeView_GetChild(lpnmh->hwndFrom, hItem);
while (hChild)
{
tvi.hItem = hChild;
tvi.mask = TVIF_HANDLE | TVIF_IMAGE
| TVIF_SELECTEDIMAGE;
TreeView_SetItem(lpnmh->hwndFrom, &tvi);
tvi.mask = TVIF_HANDLE | TVIF_IMAGE |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
TreeView_GetItem(lpnmh->hwndFrom, &tvi);
sSetPrefFlag(pConfig, nNetPref, tvi.lParam,
tvi.iImage);
hChild = TreeView_GetNextSibling(lpnmh->hwndFrom,
hChild);
}
}
else
{
HTREEITEM hChild;
BOOL bSame = TRUE;
TVITEM tviChild;
TVITEM tviParent;
hParent = TreeView_GetParent(lpnmh->hwndFrom, hItem);
hChild = TreeView_GetChild(lpnmh->hwndFrom, hParent);
tviParent.mask = TVIF_HANDLE | TVIF_PARAM;
tviParent.hItem = hParent;
TreeView_GetItem(lpnmh->hwndFrom, &tviParent);
sSetPrefFlag(pConfig, tviParent.lParam, tvi.lParam,
tvi.iImage);
tviChild.mask = TVIF_HANDLE | TVIF_IMAGE;
while (hChild && bSame)
{
tviChild.hItem = hChild;
TreeView_GetItem(lpnmh->hwndFrom, &tviChild);
if (tviChild.iImage != tvi.iImage)
bSame = FALSE;
else
hChild =
TreeView_GetNextSibling(lpnmh->hwndFrom,
hChild);
}
if (!bSame)
{
tvi.iImage = IMAGE_PARTIAL;
tvi.iSelectedImage = IMAGE_PARTIAL;
}
tvi.hItem = hParent;
tvi.mask = TVIF_HANDLE | TVIF_IMAGE |
TVIF_SELECTEDIMAGE;
TreeView_SetItem(lpnmh->hwndFrom, &tvi);
}
}
bReturnCode = TRUE;
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
break;
default:
bReturnCode = CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
break;
}
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_INCLUDEOPTIONS:
{
if (IsDlgButtonChecked(hwndDlg, IDC_INCLUDEOPTIONS) ==
BST_CHECKED)
{
pConfig->bCopyClientPrefs = TRUE;
}
else
{
pConfig->bCopyClientPrefs = FALSE;
}
sInitGUI(hwndDlg, pConfig);
bReturnCode = TRUE;
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
case IDC_SETOPTIONS:
panelFlags = 0;
if (PGPclIsComponentInstalled (kPGPclPGPkeys))
panelFlags |= ADMINKEYSPREFSPAGES;
if (PGPclIsComponentInstalled (kPGPclPGPtools))
panelFlags |= ADMINMAILPREFSPAGES;
if (PGPclIsComponentInstalled(kPGPclPGPdisk))
panelFlags |= ADMINDISKPREFSPAGES;
if (PGPclIsComponentInstalled (kPGPclPFIDS))
panelFlags |= ADMINFIREPREFSPAGES;
if (PGPclIsComponentInstalled(kPGPclVPN))
panelFlags |= ADMINVPNPREFSPAGES;
err = PGPclAdminPreferences(pConfig->pgpContext, hwndDlg,
pConfig->prefRef, pConfig->prefRefNet,
kPGPclRespectDisableFlags, panelFlags, 0, pConfig->keyDB);
if (IsntPGPError(err))
{
TreeView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_OPTIONS));
sFillTree(hwndDlg, pConfig);
}
else if (err != kPGPError_UserAbort)
PGPclErrorBox(hwndDlg, err);
bReturnCode = TRUE;
break;
case IDC_IMPORTOPTIONS:
LoadString(g_hInstance, IDS_W_IMPORTOPTIONS, szWarning, sizeof(szWarning));
LoadString(g_hInstance, IDS_TITLE, szTitle, sizeof(szTitle));
if (MessageBox(hwndDlg, szWarning, szTitle, MB_YESNO | MB_ICONQUESTION)
== IDYES)
{
PGPPrefRef clientPrefs;
PGPPrefRef netPrefs;
PGPBoolean bNet;
SaveAdminOptions(pConfig);
FreeAdminOptions(pConfig);
bNet = PGPclIsComponentInstalled(kPGPclPGPnet);
if (bNet)
err = PGPclPeekClientLibPrefRefs(&clientPrefs, &netPrefs);
else
err = PGPclPeekClientLibPrefRefs(&clientPrefs, NULL);
if (IsntPGPError(err))
{
PGPPrefRef tempPrefs;
PGPNewMemoryPrefs(pConfig->memoryMgr, clientDefaults,
clientDefaultsSize, &tempPrefs);
PGPAddPrefs(pConfig->prefRef, tempPrefs);
err = PGPclMergePrefs(tempPrefs, clientPrefs);
if (IsntPGPError(err))
err = PGPAddPrefs(clientPrefs, pConfig->prefRef);
PGPFreePrefs(tempPrefs);
}
if (IsntPGPError(err) && bNet)
{
PGPPrefRef tempPrefs;
PGPNewMemoryPrefs(pConfig->memoryMgr, netDefaults,
netDefaultsSize, &tempPrefs);
PGPAddPrefs(pConfig->prefRefNet, tempPrefs);
err = PGPclMergeNetPrefs(tempPrefs, netPrefs);
if (IsntPGPError(err))
err = PGPAddPrefs(netPrefs, pConfig->prefRefNet);
PGPFreePrefs(tempPrefs);
}
if (IsntPGPError(err))
{
InitAdminOptions(pConfig->pgpContext, pConfig, TRUE);
LoadAdminOptions(pConfig);
TreeView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_OPTIONS));
sFillTree(hwndDlg, pConfig);
}
else if (err != kPGPError_UserAbort)
PGPclErrorBox(hwndDlg, err);
}
bReturnCode = TRUE;
break;
}
break;
}
return bReturnCode;
}
static void sFillTree(HWND hwndDlg, pgpConfigInfo *pConfig)
{
HWND hCtl;
HTREEITEM hItem;
HTREEITEM hParent;
TVINSERTSTRUCT tvis;
TVITEM tvi;
HIMAGELIST hImages;
HBITMAP hBmp;
BOOL bAES;
char szFormat[255];
char szText[1024];
char szValue[255];
char szTemp[255];
char szTrue[10];
char szFalse[10];
PGPBoolean bValue;
PGPUInt32 nValue;
PGPUInt32 nFlags;
SYSTEMTIME sysTime;
PGPHotKeys *pHotKeys;
PGPKeyServerEntry *aKeyServer;
PGPUInt32 nNumServers;
PGPUInt32 nIndex;
PGPByte *pData;
PGPSize dataSize;
PGPPrefArray *prefArray;
PGPPrefStruct *prefStruct;
PGPUInt32 nCheck;
PGPUInt32 nUncheck;
PGPNetPrefFirewallRule *pRule;
PGPUInt32 nNumRules;
PGPUInt8 nPort;
HTREEITEM *ahGateway;
hCtl = GetDlgItem(hwndDlg, IDC_OPTIONS);
hImages = ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 4, 0);
hBmp = LoadBitmap (g_hInstance, MAKEINTRESOURCE (IDB_UNCHECK));
ImageList_AddMasked(hImages, hBmp, RGB(255, 0, 255));
DeleteObject(hBmp);
hBmp = LoadBitmap (g_hInstance, MAKEINTRESOURCE (IDB_CHECKED));
ImageList_AddMasked(hImages, hBmp, RGB(255, 0, 255));
DeleteObject(hBmp);
hBmp = LoadBitmap (g_hInstance, MAKEINTRESOURCE (IDB_GREYCHECK));
ImageList_AddMasked(hImages, hBmp, RGB(255, 0, 255));
DeleteObject(hBmp);
hBmp = LoadBitmap (g_hInstance, MAKEINTRESOURCE (IDB_ITEM));
ImageList_AddMasked(hImages, hBmp, RGB(255, 0, 255));
DeleteObject(hBmp);
TreeView_SetImageList(hCtl, hImages, TVSIL_NORMAL);
LoadString(g_hInstance, IDS_TRUE, szTrue, 10);
LoadString(g_hInstance, IDS_FALSE, szFalse, 10);
tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
nCheck = 0;
nUncheck = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -