📄 clprefs.c
字号:
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 + -