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

📄 clprefs.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 5 页
字号:
			OpenFileName.nFileExtension    = 0;
			LoadString (g_hInst, IDS_DEFPUBRINGEXT, szDefExt, 
								sizeof(szDefExt));
			OpenFileName.lpstrDefExt       = szDefExt;
			OpenFileName.lCustData         = 0;
			if (GetOpenFileName (&OpenFileName)) {
				SetDlgItemText (hDlg, IDC_PUBLICKEYRING, szFile);
				if (OpenFileName.nFileOffset > 0) 
					szFile[OpenFileName.nFileOffset-1] = '\0';
				lstrcpy (szInitDir, szFile);
			}
			break;

		case IDC_SETRNGSEEDFILE :
			GetDlgItemText (hDlg, IDC_RNGSEEDFILE, szFile, sizeof(szFile));
			if (GetFileAttributes (szFile) & FILE_ATTRIBUTE_DIRECTORY) {
				lstrcpy (szInitDir, szFile);
				szFile[0] = '\0';
			}
			else {
				if (szInitDir[0])
					szFile[0] = '\0';
			}
			LoadString (g_hInst, IDS_SEEDFILEFILTER, szFilter, 
								sizeof(szFilter));
			while (p = strrchr (szFilter, '@')) *p = '\0';
			LoadString (g_hInst, IDS_SEEDFILECAPTION, szTitle, 
								sizeof(szTitle));
			OpenFileName.lStructSize       = sizeof (OPENFILENAME);
			OpenFileName.hwndOwner         = hDlg;
			OpenFileName.hInstance         = (HANDLE)g_hInst;
			OpenFileName.lpstrFilter       = szFilter;
			OpenFileName.lpstrCustomFilter = (LPTSTR)NULL;
			OpenFileName.nMaxCustFilter    = 0L;
			OpenFileName.nFilterIndex      = 1L;
			OpenFileName.lpstrFile         = szFile;
			OpenFileName.nMaxFile          = sizeof (szFile);
			OpenFileName.lpstrFileTitle    = NULL;
			OpenFileName.nMaxFileTitle     = 0;
			OpenFileName.lpstrInitialDir   = szInitDir;
			OpenFileName.lpstrTitle        = szTitle;
			OpenFileName.Flags			   = OFN_HIDEREADONLY;
			OpenFileName.nFileOffset       = 0;
			OpenFileName.nFileExtension    = 0;
			LoadString (g_hInst, IDS_DEFSEEDFILEEXT, szDefExt, 
								sizeof(szDefExt));
			OpenFileName.lpstrDefExt       = szDefExt;
			OpenFileName.lCustData         = 0;
			if (GetOpenFileName (&OpenFileName)) {
				SetDlgItemText (hDlg, IDC_RNGSEEDFILE, szFile);
				if (OpenFileName.nFileOffset > 0) 
					szFile[OpenFileName.nFileOffset-1] = '\0';
				lstrcpy (szInitDir, szFile);
			}
			break;
		}
		break;

	case WM_NOTIFY :
		switch (((NMHDR FAR *) lParam)->code) {

		case PSN_SETACTIVE :
			break;

		case PSN_HELP :
			WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT, 
				IDH_PGPCLPREF_FILEDIALOG); 
			break;

		case PSN_APPLY :
			// get current private keyring file
			err = PGPsdkPrefGetFileSpec (ContextRef, 
							kPGPsdkPref_PrivateKeyring, &fileRef);
			if (IsntPGPError (err) && fileRef) {
				PGPGetFullPathFromFileSpec (fileRef, &lpsz);
				lstrcpy (szRing, lpsz);
				PGPFreeData (lpsz);
				// compare with selected file and set pref if different
				GetDlgItemText (hDlg, IDC_PRIVATEKEYRING, szFile, 
									sizeof(szFile));
				// create file if it doesn't exist -wjb
				hfile = CreateFile (szFile, GENERIC_READ|GENERIC_WRITE, 
								0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 
								NULL);
				CloseHandle (hfile);

				if (lstrcmpi (szFile, szRing) != 0) 
				{
					PGPFreeFileSpec (fileRef);
					err = PGPNewFileSpecFromFullPath (ContextRef, szFile, 
														&fileRef);
					if (PGPclErrorBox (hDlg, err)) 
						return TRUE;

					// create file if it doesn't exist 
					hfile = CreateFile (szFile, GENERIC_READ|GENERIC_WRITE, 
								0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 
								NULL);
					CloseHandle (hfile);

					err = PGPsdkPrefSetFileSpec (ContextRef, 
							kPGPsdkPref_PrivateKeyring, fileRef);
					if (!PGPclErrorBox (hDlg, err)) 
						bReloadKeyring = TRUE;
				}
				PGPFreeFileSpec (fileRef);
			}

			// get current public keyring file
			err = PGPsdkPrefGetFileSpec (ContextRef, 
							kPGPsdkPref_PublicKeyring, &fileRef);
			if (IsntPGPError (err) && fileRef) {
				PGPGetFullPathFromFileSpec (fileRef, &lpsz);
				lstrcpy (szRing, lpsz);
				PGPFreeData (lpsz);
				// compare with selected file and set pref if different
				GetDlgItemText (hDlg, IDC_PUBLICKEYRING, szFile, 
									sizeof(szFile));
				// create file if it doesn't exist -wjb
				hfile = CreateFile (szFile, GENERIC_READ|GENERIC_WRITE, 
								0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 
								NULL);
				CloseHandle (hfile);

				if (lstrcmpi (szFile, szRing) != 0) {
					PGPFreeFileSpec (fileRef);
					err = PGPNewFileSpecFromFullPath (ContextRef, szFile, 
														&fileRef);
					if (PGPclErrorBox (hDlg, err)) 
						return TRUE;

					// create file if it doesn't exist
					hfile = CreateFile (szFile, GENERIC_READ|GENERIC_WRITE, 
								0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 
								NULL);
					CloseHandle (hfile);

					err = PGPsdkPrefSetFileSpec (ContextRef, 
							kPGPsdkPref_PublicKeyring, fileRef);
					if (!PGPclErrorBox (hDlg, err)) 
						bReloadKeyring = TRUE;
				}
				PGPFreeFileSpec (fileRef);
			}

			// get RNG seed file
			err = PGPsdkPrefGetFileSpec (ContextRef, 
							kPGPsdkPref_RandomSeedFile, &fileRef);
			if (IsntPGPError (err) && fileRef) {
				PGPGetFullPathFromFileSpec (fileRef, &lpsz);
				lstrcpy (szRing, lpsz);
				PGPFreeData (lpsz);
				// compare with selected file and set pref if different
				GetDlgItemText (hDlg, IDC_RNGSEEDFILE, szFile, 
									sizeof(szFile));
				// create file if it doesn't exist -wjb
				hfile = CreateFile (szFile, GENERIC_READ|GENERIC_WRITE, 
								0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 
								NULL);
				CloseHandle (hfile);

				if (lstrcmpi (szFile, szRing) != 0) {
					PGPFreeFileSpec (fileRef);
					err = PGPNewFileSpecFromFullPath (ContextRef, szFile, 
														&fileRef);
					if (PGPclErrorBox (hDlg, err)) 
						return TRUE;

					// create file if it doesn't exist
					hfile = CreateFile (szFile, GENERIC_READ|GENERIC_WRITE, 
								0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 
								NULL);
					CloseHandle (hfile);

					PGPclErrorBox (hDlg, PGPsdkPrefSetFileSpec (ContextRef, 
							kPGPsdkPref_RandomSeedFile, fileRef));
				}
				PGPFreeFileSpec (fileRef);
			}

			if (bReloadKeyring) {
				// reset warn flag
				PGPSetPrefBoolean (PrefRefClient, 
					kPGPPrefWarnOnReadOnlyKeyRings, (PGPBoolean)TRUE);
			}
			returnErr = kPGPError_NoErr;
            SetWindowLong (hDlg, DWL_MSGRESULT, PSNRET_NOERROR);

			return TRUE;

		case PSN_KILLACTIVE :
			GetDlgItemText (hDlg, IDC_PRIVATEKEYRING, szFile, sizeof(szFile));
			if (!sIsFileNameOK (szFile)) 
			{
				PGPclMessageBox (GetParent (hDlg), 
					IDS_CAPTION, IDS_ILLEGALFILENAME,
					MB_OK | MB_ICONHAND);
				SendDlgItemMessage (hDlg, IDC_PRIVATEKEYRING, EM_SETSEL, 0, -1);
				SetFocus (GetDlgItem (hDlg, IDC_PRIVATEKEYRING));
				SetWindowLong (hDlg, DWL_MSGRESULT, TRUE);
				return TRUE;
			}

			GetDlgItemText (hDlg, IDC_PUBLICKEYRING, szFile, sizeof(szFile));
			if (!sIsFileNameOK (szFile)) 
			{
				PGPclMessageBox (GetParent (hDlg), 
					IDS_CAPTION, IDS_ILLEGALFILENAME,
					MB_OK | MB_ICONHAND);
				SendDlgItemMessage (hDlg, IDC_PUBLICKEYRING, EM_SETSEL, 0, -1);
				SetFocus (GetDlgItem (hDlg, IDC_PUBLICKEYRING));
				SetWindowLong (hDlg, DWL_MSGRESULT, TRUE);
				return TRUE;
			}

			GetDlgItemText (hDlg, IDC_RNGSEEDFILE, szFile, sizeof(szFile));
			if (!sIsFileNameOK (szFile)) 
			{
				PGPclMessageBox (GetParent (hDlg), 
					IDS_CAPTION, IDS_ILLEGALFILENAME,
					MB_OK | MB_ICONHAND);
				SendDlgItemMessage (hDlg, IDC_RNGSEEDFILE, EM_SETSEL, 0, -1);
				SetFocus (GetDlgItem (hDlg, IDC_RNGSEEDFILE));
				SetWindowLong (hDlg, DWL_MSGRESULT, TRUE);
				return TRUE;
			}

			SetWindowLong (hDlg, DWL_MSGRESULT, FALSE);
			return TRUE;

		case PSN_RESET :
			returnErr = kPGPError_UserAbort;
            SetWindowLong (hDlg, DWL_MSGRESULT, FALSE);
			break;
		}

	}
	return FALSE;

}

//	_____________________________________________________
//
//  Message processing function for property sheet dialog

static LRESULT WINAPI 
sEncryptPropDlgProc (
		HWND	hDlg, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	RECT					rc;
	UINT					u, uSec, uEncrypt, uSign;
	PGPBoolean				b;
	CHAR					sz[64];
	PCACHEDURATIONSTRUCT	pcds;

	switch (uMsg) {

	case WM_INITDIALOG:
		
		pcds = clAlloc (sizeof(CACHEDURATIONSTRUCT));
		SetWindowLong (hDlg, GWL_USERDATA, (LONG)pcds);
		if (bNeedsCentering) 
		{
			HWND	hParent;
			RECT	rc;

			hParent = GetParent (hDlg);
			GetWindowRect (hParent, &rc);
			SetWindowPos (hParent, NULL,
				(GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left)) / 2,
				(GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top)) / 3,
				0, 0, SWP_NOSIZE | SWP_NOZORDER);
			bNeedsCentering = FALSE;
		}

		// initialize decrypt to self
		b = DEFAULT_ENCRYPTTOSELF;
		PGPGetPrefBoolean (PrefRefClient, kPGPPrefEncryptToSelf, &b);
		if (b) CheckDlgButton (hDlg, IDC_ENCRYPTTOSELF, BST_CHECKED);
		else CheckDlgButton (hDlg, IDC_ENCRYPTTOSELF, BST_UNCHECKED);

		// create and initialize decryption date/time picker control
		GetWindowRect (GetDlgItem (hDlg, IDC_DECRYPTCACHETIME), &rc);
		MapWindowPoints (NULL, hDlg, (LPPOINT)&rc, 2);
		pcds->hwndDecryptDuration = CreateWindowEx (0, DATETIMEPICK_CLASS,
                             "DateTime",
                             WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|
							 DTS_TIMEFORMAT,
                             rc.left, rc.top, 
							 rc.right-rc.left, rc.bottom-rc.top, 
							 hDlg, (HMENU)IDC_DECRYPTCACHETIME, 
							 g_hInst, NULL);
		SendMessage (pcds->hwndDecryptDuration, DTM_SETFORMAT, 0, 
						(LPARAM)"HH' : 'mm' : 'ss");
		SetWindowPos (pcds->hwndDecryptDuration, 
				GetDlgItem (hDlg, IDC_DECRYPTCACHEENABLE),
				0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
		
		GetSystemTime (&(pcds->stDecryptDuration));
		uSec = DEFAULT_DECRYPTCACHESECONDS;
		PGPGetPrefNumber (PrefRefClient,kPGPPrefDecryptCacheSeconds, &uSec);
		u = uSec / 3600;
		pcds->stDecryptDuration.wHour = u;

		uSec -= (u * 3600);
		u = uSec / 60;
		pcds->stDecryptDuration.wMinute = u;

		uSec -= (u * 60);
		pcds->stDecryptDuration.wSecond = uSec;

		pcds->stDecryptDuration.wMilliseconds = 0;

		SendMessage (pcds->hwndDecryptDuration, DTM_SETSYSTEMTIME, GDT_VALID, 
						(LPARAM)&(pcds->stDecryptDuration));

		// initialize decrypt cache on/off
		b = DEFAULT_DECRYPTCACHEENABLE;
		PGPGetPrefBoolean (PrefRefClient, kPGPPrefDecryptCacheEnable, &b);
		if (b) {
			CheckDlgButton (hDlg, IDC_DECRYPTCACHEENABLE, BST_CHECKED);
			EnableWindow (pcds->hwndDecryptDuration, TRUE);
		}
		else {
			CheckDlgButton (hDlg, IDC_DECRYPTCACHEENABLE, BST_UNCHECKED);
			EnableWindow (pcds->hwndDecryptDuration, FALSE);
		}


		// create and initialize sign date/time picker control
		GetWindowRect (GetDlgItem (hDlg, IDC_SIGNCACHETIME), &rc);
		MapWindowPoints (NULL, hDlg, (LPPOINT)&rc, 2);
		pcds->hwndSignDuration = CreateWindowEx (0, DATETIMEPICK_CLASS,
                             "DateTime",
                             WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|
							 DTS_TIMEFORMAT,
                             rc.left, rc.top, 
							 rc.right-rc.left, rc.bottom-rc.top, 
							 hDlg, (HMENU)IDC_SIGNCACHETIME, 
							 g_hInst, NULL);
		SendMessage (pcds->hwndSignDuration, DTM_SETFORMAT, 0, 
						(LPARAM)"HH' : 'mm' : 'ss");
		SetWindowPos (pcds->hwndSignDuration, 
				GetDlgItem (hDlg, IDC_SIGNCACHEENABLE),
				0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
		
		GetSystemTime (&(pcds->stSignDuration));
		uSec = DEFAULT_DECRYPTCACHESECONDS;
		PGPGetPrefNumber (PrefRefClient,kPGPPrefSignCacheSeconds, &uSec);
		u = uSec / 3600;
		pcds->stSignDuration.wHour = u;

		uSec -= (u * 3600);
		u = uSec / 60;
		pcds->stSignDuration.wMinute = u;

		uSec -= (u * 60);
		pcds->stSignDuration.wSecond = uSec;

		pcds->stSignDuration.wMilliseconds = 0;

		SendMessage (pcds->hwndSignDuration, DTM_SETSYSTEMTIME, GDT_VALID, 
						(LPARAM)&(pcds->stSignDuration));

		// initialize sign cache on/off
		b = DEFAULT_SIGNCACHEENABLE;
		PGPGetPrefBoolean (PrefRefClient, kPGPPrefSignCacheEnable, &b);
		if (b) {
			CheckDlgButton (hDlg, IDC_SIGNCACHEENABLE, BST_CHECKED);
			EnableWindow (pcds->hwndSignDuration, TRUE);
		}
		else {
			CheckDlgButton (hDlg, IDC_SIGNCACHEENABLE, BST_UNCHECKED);
			EnableWindow (pcds->hwndSignDuration, FALSE);
		}

		// comment block text
		SendDlgItemMessage (hDlg, IDC_COMMENTBLOCK, EM_SETLIMITTEXT, 
							COMMENTBLOCK_MAX_LENGTH, 0);
		sz[0] = '\0';
#if PGP_BUSINESS_SECURITY
		PGPGetPrefStringBuffer (PrefRefAdmin, kPGPPrefComments, 
								sizeof(sz), sz);
#endif
		if (sz[0]) 
			EnableWindow (GetDlgItem (hDlg, IDC_COMMENTBLOCK), FALSE);
		else 
			PGPGetPrefStringBuffer (PrefRefClient, kPGPPrefComment, 
									sizeof(sz), sz);
		SetDlgItemText (hDlg, IDC_COMMENTBLOCK, sz);

		b = DEFAULT_WIPECONFIRM;
		PGPGetPrefBoolean (PrefRefClient, kPGPPrefWarnOnWipe, &b);
		if (b) CheckDlgButton (hDlg, IDC_WIPECONFIRM, BST_CHECKED);
		else CheckDlgButton (hDlg, IDC_WIPECONFIRM, BST_UNCHECKED);

		// initialize fast key gen preference
		b = DEFAULT_USEFASTKEYGEN;
		PGPGetPrefBoolean (PrefRefClient, kPGPPrefFastKeyGen, &b);
		if (b) CheckDlgButton (hDlg, IDC_USEFASTKEYGEN, BST_CHECKED);
		else CheckDlgButton (hDlg, IDC_USEFASTKEYGEN, BST_UNCHECKED);

		// initialize wipe preferences
		SendDlgItemMessage (hDlg, IDC_NUMPASSESSPIN, UDM_SETRANGE,
				0, (LPARAM)MAKELONG (MAXWIPEPASSES, 1));

		u = DEFAULT_WIPEPASSES;
		PGPGetPrefNumber (PrefRefClient, kPGPPrefFileWipePasses, &u);
		SendDlgItemMessage (hDlg, IDC_NUMPASSESSPIN, UDM_SETPOS,
				0, (LPARAM)MAKELONG (u, 0));

		return TRUE;

    case WM_HELP: 
        WinHelp (((LPHELPINFO) lParam)->hItemHandle, g_szHelpFile, 
            HELP_WM_HELP, (DWORD) (LPSTR) aGeneralIds); 
        break; 
 
    case WM_CONTEXTMENU: 
        WinHelp ((HWND) wParam, g_szHelpFile, HELP_CONTEXTMENU, 
            (DWORD) (LPVOID) aGeneralIds); 
        break; 

	case WM_COMMAND :
		switch (LOWORD (wParam)) {

		case IDC_DECRYPTCACHEENABLE :
			pcds = (PCACHEDURATIONSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			if (IsDlgButtonChecked (hDlg, 
						IDC_DECRYPTCACHEENABLE) == BST_CHECKED) 
				EnableWindow (pcds->hwndDecryptDuration, TRUE);
			else 
				EnableWindow (pcds->hwndDecryptDuration, FALSE);
			break;

		case IDC_SIGNCACHEENABLE :
			pcds = (PCACHEDURATIONSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			if (IsDlgButtonChecked (hDlg,
						IDC_SIGNCACHEENABLE) == BST_CHECKED) 
				EnableWindow (pcds->hwndSignDuration, TRUE);
			else 
				EnableWindow (pcds->hwndSignDuration, FALSE);
			break;
		}
		break;

	case WM_NOTIFY :
		switch (((NMHDR FAR *) lParam)->code) {
		case PSN_SETACTIVE :
			break;

		case PSN_HELP :
			WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT, 
				IDH_PGPCLPREF_ENCRYPTDIALOG); 
			break;

		case PSN_APPLY :
			pcds = (PCACHEDURATIONSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);

			SendMessage (pcds->hwndDecryptDuration, DTM_GETSYSTEMTIME, 0, 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -