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

📄 access.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
📖 第 1 页 / 共 5 页
字号:
/*____________________________________________________________________________
	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 + -