📄 pkgenwiz.c
字号:
return FALSE;
}
case PGPCL_SERVERDONE :
pkgi->bSendComplete = TRUE;
case PGPCL_SERVERABORT :
case PGPCL_SERVERERROR :
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
{
PPGPclSERVEREVENT pEvent = (PPGPclSERVEREVENT)lParam;
KillTimer (hDlg, PROGRESS_TIMER);
pkgi->iStatusValue = -1;
pkgi->iStatusDirection = 1;
InvalidateRect (hDlg, NULL, FALSE);
SetDlgItemText (hDlg, IDC_PROGRESSTEXT,
pEvent->szmessage);
PostMessage (GetParent(hDlg),
PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT);
EnableWindow (GetDlgItem (GetParent (hDlg), IDCANCEL),
FALSE);
ShowWindow (GetDlgItem (hDlg, IDC_PROGRESS), SW_HIDE);
PGPFreeKeySet (keysetSend);
pEvent->cancel = pkgi->bCancelPending;
return FALSE;
}
case PSN_HELP:
WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT,
IDH_PGPPK_WIZ_SEND);
break;
case PSN_QUERYCANCEL:
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (!pkgi->bSendComplete)
{
CHAR sz[128];
pkgi->bCancelPending = TRUE;
LoadString (g_hInst, IDS_KW_CANCELING, sz, sizeof(sz));
SetDlgItemText (hDlg, IDC_PROGRESSTEXT, sz);
SetWindowLong (hDlg, DWL_MSGRESULT, -1L);
bReturnCode = TRUE;
}
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for querying about sending to keyserver
static LRESULT WINAPI
sKeyWizardPreSendDlgProc (
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PKEYGENINFO pkgi;
BOOL bReturnCode = FALSE;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pkgi = (PKEYGENINFO) ppspMsgRec->lParam;
SetWindowLong (hDlg, GWL_USERDATA, (LPARAM)pkgi);
CheckDlgButton (hDlg, IDC_CHECK_SEND, BST_UNCHECKED);
break;
}
case WM_PAINT :
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (pkgi->hPalette)
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint (hDlg, &ps);
SelectPalette (hDC, pkgi->hPalette, FALSE);
RealizePalette (hDC);
EndPaint (hDlg, &ps);
}
break;
case WM_COMMAND:
switch (LOWORD (wParam)) {
case IDC_CHECK_SEND:
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (IsDlgButtonChecked (hDlg, IDC_CHECK_SEND) == BST_CHECKED)
pkgi->bDoSend = TRUE;
else
pkgi->bDoSend = FALSE;
break;
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch (pnmh->code) {
case PSN_SETACTIVE:
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
PostMessage (GetParent(hDlg),
PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT);
SendDlgItemMessage (hDlg, IDC_WIZBITMAP, STM_SETIMAGE,
IMAGE_BITMAP, (LPARAM) pkgi->hBitmap);
SetWindowLong (hDlg, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
case PSN_KILLACTIVE :
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (IsDlgButtonChecked (hDlg, IDC_CHECK_SEND) == BST_CHECKED)
pkgi->bDoSend = TRUE;
else
pkgi->bDoSend = FALSE;
SetWindowLong (hDlg, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
case PSN_HELP:
WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT, IDH_PGPPK_WIZ_PRESEND);
break;
case PSN_QUERYCANCEL:
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for querying user about signing new
// key with old key
static LRESULT WINAPI
sKeyWizardSignOldDlgProc (
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PKEYGENINFO pkgi;
BOOL bReturnCode = FALSE;
PGPBoolean bNeedsPhrase;
static HBRUSH hBrushEdit;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pkgi = (PKEYGENINFO) ppspMsgRec->lParam;
SetWindowLong (hDlg, GWL_USERDATA, (LPARAM)pkgi);
wpOrigPhrase1Proc = (WNDPROC) SetWindowLong (GetDlgItem (hDlg,
IDC_EDIT_PASSPHRASE),
GWL_WNDPROC,
(LONG) sWizPhrase3SubclassProc);
hBrushEdit = CreateSolidBrush (GetSysColor (COLOR_WINDOW));
break;
}
case WM_PAINT :
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (pkgi->hPalette)
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint (hDlg, &ps);
SelectPalette (hDC, pkgi->hPalette, FALSE);
RealizePalette (hDC);
EndPaint (hDlg, &ps);
}
break;
case WM_CTLCOLOREDIT:
if (((HWND)lParam == GetDlgItem (hDlg, IDC_EDIT_PASSPHRASE)) ||
((HWND)lParam == GetDlgItem (hDlg, IDC_EDIT_PASSPHRASE2)))
{
SetBkColor ((HDC)wParam, GetSysColor (COLOR_WINDOW));
if (bHideTyping)
SetTextColor ((HDC)wParam, GetSysColor(COLOR_WINDOW));
else
SetTextColor ((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT));
return (BOOL)hBrushEdit;
}
break;
case WM_DESTROY:
SetWindowLong (GetDlgItem (hDlg, IDC_EDIT_PASSPHRASE),
GWL_WNDPROC, (LONG)wpOrigPhrase1Proc);
DeleteObject (hBrushEdit);
PKWipeEditBox (hDlg, IDC_EDIT_PASSPHRASE);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_CHECK_HIDE_TYPING:
if (IsDlgButtonChecked (
hDlg, IDC_CHECK_HIDE_TYPING) == BST_CHECKED)
bHideTyping = TRUE;
else
bHideTyping = FALSE;
InvalidateRect (GetDlgItem (hDlg, IDC_EDIT_PASSPHRASE),
NULL, TRUE);
break;
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch (pnmh->code) {
case PSN_SETACTIVE:
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (!pkgi->OldKey)
{
SetWindowLong(hDlg, DWL_MSGRESULT, -1L); // skip this page
bReturnCode = TRUE;
}
else
{
PostMessage (GetParent(hDlg),
PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT);
SendDlgItemMessage (hDlg, IDC_WIZBITMAP, STM_SETIMAGE,
IMAGE_BITMAP, (LPARAM) pkgi->hBitmap);
bHideTyping = TRUE;
CheckDlgButton (hDlg, IDC_CHECK_HIDE_TYPING, BST_CHECKED);
CheckDlgButton (hDlg, IDC_CHECK_SIGN_KEY, BST_CHECKED);
PGPGetKeyBoolean (pkgi->OldKey,
kPGPKeyPropNeedsPassphrase, &bNeedsPhrase);
if (!bNeedsPhrase)
{
SetDlgItemText (hDlg, IDC_EDIT_PASSPHRASE, "");
EnableWindow (GetDlgItem (hDlg,IDC_EDIT_PASSPHRASE),
FALSE);
EnableWindow (GetDlgItem (hDlg,IDC_CHECK_HIDE_TYPING),
FALSE);
}
SetWindowLong (hDlg, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
}
break;
case PSN_KILLACTIVE:
if (IsDlgButtonChecked (hDlg, IDC_CHECK_SIGN_KEY) == BST_CHECKED)
{
BOOL bAllOk = FALSE;
PGPUserIDRef UserID;
CHAR szDummy[4];
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (szPhrase1)
{
secFree (szPhrase1);
szPhrase1 = NULL;
}
lPhrase1Len = SendDlgItemMessage (hDlg,
IDC_EDIT_PASSPHRASE,
WM_GETTEXTLENGTH, 0, 0) +1;
szPhrase1 = secAlloc (lPhrase1Len);
if (szPhrase1)
GetDlgItemText (hDlg, IDC_EDIT_PASSPHRASE,
szDummy, sizeof(szDummy));
if (szPhrase1)
{
PGPGetPrimaryUserID (pkgi->Key, &UserID);
if (UserID) {
PGPError err = kPGPError_BadPassphrase;
// make sure we have enough entropy
PGPclRandom (pkgi->Context, pkgi->hWndWiz, 0);
err = PGPSignUserID (UserID, pkgi->OldKey,
PGPOPassphrase (pkgi->Context, szPhrase1),
PGPOLastOption (pkgi->Context));
if (err == kPGPError_BadPassphrase)
{
PKMessageBox (hDlg, IDS_KW_TITLE,
IDS_KW_BAD_PASSPHRASE,
MB_OK | MB_ICONERROR);
}
else
{
if (err != kPGPError_NoErr)
PGPclErrorBox (pkgi->hWndWiz, err);
else
bAllOk = TRUE;
}
}
secFree (szPhrase1);
szPhrase1 = NULL;
PKWipeEditBox (hDlg, IDC_EDIT_PASSPHRASE);
}
if (!bAllOk)
{
SetWindowLong (hDlg, DWL_MSGRESULT, -1L);
bReturnCode = TRUE;
}
}
break;
case PSN_HELP:
WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT,
IDH_PGPPK_WIZ_SIGNOLD);
break;
case PSN_QUERYCANCEL:
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for actually generating the key(s)
static LRESULT WINAPI
sKeyWizardGenerationDlgProc (
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PKEYGENINFO pkgi;
BOOL bReturnCode = FALSE;
DWORD dwThreadID;
char szPhaseString[128];
static BOOL bAVIPresent;
static BOOL bAVIFinished;
static BOOL bAVIStarted;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pkgi = (PKEYGENINFO) ppspMsgRec->lParam;
SetWindowLong (hDlg, GWL_USERDATA, (LPARAM)pkgi);
pkgi->uWorkingPhase = IDS_KEYGENPHASE1;
LoadString (g_hInst, pkgi->uWorkingPhase,
szPhaseString, sizeof(szPhaseString));
SetDlgItemText (hDlg, IDC_PHASE, szPhaseString);
pkgi->hWndWiz = hDlg;
pkgi->bInGeneration = TRUE;
// Kick off generation proc, here
_beginthreadex (NULL, 0,
(LPTHREAD_START_ROUTINE)sKeyGenerationThread,
(void *) pkgi, 0, &dwThreadID);
break;
}
case WM_PAINT :
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (pkgi->hPalette)
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint (hDlg, &ps);
SelectPalette (hDC, pkgi->hPalette, FALSE);
RealizePalette (hDC);
EndPaint (hDlg, &ps);
}
if (!bAVIPresent)
sDrawSendStatus (GetDlgItem (hDlg, IDC_PROGRESS), pkgi);
break;
case KM_M_CHANGEPHASE:
bReturnCode = TRUE;
LoadString (g_hInst, lParam, szPhaseString, sizeof(szPhaseString));
SetDlgItemText (hDlg, IDC_PHASE, szPhaseString);
break;
case WM_TIMER :
if (wParam == PROGRESS_TIMER)
{
if (bAVIPresent)
{
KillTimer (hDlg, PROGRESS_TIMER);
bReturnCode = TRUE;
if (bAVIStarted)
{
if (!bAVIFinished)
{
bAVIFinished = TRUE;
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (!pkgi->bInGeneration)
PostMessage (hDlg, KM_M_GENERATION_COMPLETE, 0, 0);
}
}
else
{
bAVIPresent =
sStartKeyGenAVI (GetDlgItem (hDlg, IDC_WORKINGAVI));
if (bAVIPresent)
{
ShowWindow (GetDlgItem (hDlg, IDC_WORKINGAVI), SW_SHOW);
SetTimer (hDlg, PROGRESS_TIMER, AVI_RUNTIME, NULL);
bAVIStarted = TRUE;
}
else
{
ShowWindow (GetDlgItem (hDlg, IDC_PROGRESS), SW_SHOW);
SetTimer (hDlg, PROGRESS_TIMER, LEDTIMERPERIOD, NULL);
}
}
}
else
{
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
pkgi->iStatusValue += pkgi->iStatusDirection;
if (pkgi->iStatusValue <= 0)
{
pkgi->iStatusValue = 0;
pkgi->iStatusDirection = 1;
}
else if (pkgi->iStatusValue >= NUMLEDS-1)
{
pkgi->iStatusValue = NUMLEDS-1;
pkgi->iStatusDirection = -1;
}
sInvalidateLEDs (hDlg, IDC_PROGRESS);
}
}
break;
case KM_M_GENERATION_COMPLETE:
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (bAVIPresent)
{
if (bAVIFinished)
Animate_Stop (GetDlgItem (hDlg, IDC_WORKINGAVI));
}
else
{
KillTimer (hDlg, PROGRESS_TIMER);
pkgi->iStatusValue = -1;
pkgi->iStatusDirection = 1;
InvalidateRect (hDlg, NULL, FALSE);
}
if (pkgi->bCancelPending)
{
LoadString (g_hInst, IDS_KW_CANCELING,
szPhaseString, sizeof(szPhaseString));
}
else
{
if (pkgi->iFinalResult)
{
LoadString (g_hInst, IDS_KW_COMPLETE,
szPhaseString, sizeof(szPhaseString));
SendMessage (GetParent(hDlg),
PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT);
}
else
{
LoadString (g_hInst, IDS_KW_UNABLETOCOMPLETE,
szPhaseString, sizeof(szPhaseString));
}
}
SetDlgItemText (hDlg, IDC_PHASE, szPhaseString);
bReturnCode = TRUE;
break;
case WM_COMMAND:
switch (HIWORD(wParam)) {
case BN_CLICKED:
if (LOWORD(wParam) == IDC_RADIO_CUSTOM_DAYS)
EnableWindow (GetDlgItem (hDlg, IDC_EDIT_CUSTOM_DAYS), TRUE);
else
EnableWindow (GetDlgItem (hDlg, IDC_EDIT_CUSTOM_DAYS), FALSE);
break;
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch (pnmh->code) {
case PSN_SETACTIVE:
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
PostMessage (GetParent(hDlg), PSM_SETWIZBUTTONS, 0, 0);
SendDlgItemMessage (hDlg, IDC_WIZBITMAP, STM_SETIMAGE,
IMAGE_BITMAP, (LPARAM) pkgi->hBitmap);
pkgi->iStatusValue = -1;
pkgi->iStatusDirection = 1;
bAVIPresent = TRUE; // assume TRUE until we test it
bAVIFinished = FALSE;
bAVIStarted = FALSE;
SetTimer (hDlg, PROGRESS_TIMER, 100, NULL); // delay a few ms
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -