X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/51e9d3c00a3471f284e89ec1f59f38ca25f10c5f..1e00c92b81273392a7db4796dc163b0729891e44:/windows/winpgnt.c diff --git a/windows/winpgnt.c b/windows/winpgnt.c index b0cd08bb..d592a5e6 100644 --- a/windows/winpgnt.c +++ b/windows/winpgnt.c @@ -24,9 +24,8 @@ #define IDI_MAINICON 200 #define IDI_TRAYICON 201 -#define WM_XUSER (WM_USER + 0x2000) -#define WM_SYSTRAY (WM_XUSER + 6) -#define WM_SYSTRAY2 (WM_XUSER + 7) +#define WM_SYSTRAY (WM_APP + 6) +#define WM_SYSTRAY2 (WM_APP + 7) #define AGENT_COPYDATA_ID 0x804e50ba /* random goop */ @@ -114,10 +113,10 @@ static tree234 *rsakeys, *ssh2keys; static int has_security; #ifndef NO_SECURITY -typedef DWORD(WINAPI * gsi_fn_t) - (HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, - PSID *, PSID *, PACL *, PACL *, PSECURITY_DESCRIPTOR *); -static gsi_fn_t getsecurityinfo; +DECL_WINDOWS_FUNCTION(static, DWORD, GetSecurityInfo, + (HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, + PSID *, PSID *, PACL *, PACL *, + PSECURITY_DESCRIPTOR *)); #endif /* @@ -416,7 +415,7 @@ static void add_keyfile(Filename filename) int i, nkeys, bloblen, keylistlen; if (type == SSH_KEYTYPE_SSH1) { - if (!rsakey_pubblob(&filename, &blob, &bloblen, &error)) { + if (!rsakey_pubblob(&filename, &blob, &bloblen, NULL, &error)) { char *msg = dupprintf("Couldn't load private key (%s)", error); message_box(msg, APPNAME, MB_OK | MB_ICONERROR, HELPCTXID(errors_cantloadkey)); @@ -426,7 +425,8 @@ static void add_keyfile(Filename filename) keylist = get_keylist1(&keylistlen); } else { unsigned char *blob2; - blob = ssh2_userkey_loadpub(&filename, NULL, &bloblen, &error); + blob = ssh2_userkey_loadpub(&filename, NULL, &bloblen, + NULL, &error); if (!blob) { char *msg = dupprintf("Couldn't load private key (%s)", error); message_box(msg, APPNAME, MB_OK | MB_ICONERROR, @@ -1470,15 +1470,15 @@ static int CALLBACK KeyListProc(HWND hwnd, UINT msg, rd.right - rd.left, rd.bottom - rd.top, TRUE); } - if (help_path) - SetWindowLong(hwnd, GWL_EXSTYLE, - GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_CONTEXTHELP); + if (has_help()) + SetWindowLongPtr(hwnd, GWL_EXSTYLE, + GetWindowLongPtr(hwnd, GWL_EXSTYLE) | + WS_EX_CONTEXTHELP); else { HWND item = GetDlgItem(hwnd, 103); /* the Help button */ if (item) DestroyWindow(item); } - requested_help = FALSE; keylist = hwnd; { @@ -1571,29 +1571,22 @@ static int CALLBACK KeyListProc(HWND hwnd, UINT msg, case 103: /* help */ if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED) { - if (help_path) { - WinHelp(hwnd, help_path, HELP_COMMAND, - (DWORD)"JI(`',`pageant.general')"); - requested_help = TRUE; - } + launch_help(hwnd, WINHELP_CTX_pageant_general); } return 0; } return 0; case WM_HELP: - if (help_path) { + { int id = ((LPHELPINFO)lParam)->iCtrlId; char *topic = NULL; switch (id) { - case 100: topic = "pageant.keylist"; break; - case 101: topic = "pageant.addkey"; break; - case 102: topic = "pageant.remkey"; break; + case 100: topic = WINHELP_CTX_pageant_keylist; break; + case 101: topic = WINHELP_CTX_pageant_addkey; break; + case 102: topic = WINHELP_CTX_pageant_remkey; break; } if (topic) { - char *cmd = dupprintf("JI(`',`%s')", topic); - WinHelp(hwnd, help_path, HELP_COMMAND, (DWORD)cmd); - sfree(cmd); - requested_help = TRUE; + launch_help(hwnd, topic); } else { MessageBeep(0); } @@ -1787,11 +1780,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, } break; case IDM_HELP: - if (help_path) { - WinHelp(hwnd, help_path, HELP_COMMAND, - (DWORD)"JI(`',`pageant.general')"); - requested_help = TRUE; - } + launch_help(hwnd, WINHELP_CTX_pageant_general); break; default: { @@ -1818,10 +1807,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, } break; case WM_DESTROY: - if (requested_help) { - WinHelp(hwnd, help_path, HELP_QUIT, 0); - requested_help = FALSE; - } + quit_help(hwnd); PostQuitMessage(0); return 0; case WM_COPYDATA: @@ -1862,10 +1848,10 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, #endif return 0; } - if (getsecurityinfo(proc, SE_KERNEL_OBJECT, - OWNER_SECURITY_INFORMATION, - &procowner, NULL, NULL, NULL, - &psd2) != ERROR_SUCCESS) { + if (p_GetSecurityInfo(proc, SE_KERNEL_OBJECT, + OWNER_SECURITY_INFORMATION, + &procowner, NULL, NULL, NULL, + &psd2) != ERROR_SUCCESS) { #ifdef DEBUG_IPC debug(("couldn't get owner info for process\n")); #endif @@ -1873,10 +1859,10 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, return 0; /* unable to get security info */ } CloseHandle(proc); - if ((rc = getsecurityinfo(filemap, SE_KERNEL_OBJECT, - OWNER_SECURITY_INFORMATION, - &mapowner, NULL, NULL, NULL, - &psd1) != ERROR_SUCCESS)) { + if ((rc = p_GetSecurityInfo(filemap, SE_KERNEL_OBJECT, + OWNER_SECURITY_INFORMATION, + &mapowner, NULL, NULL, NULL, + &psd1) != ERROR_SUCCESS)) { #ifdef DEBUG_IPC debug( ("couldn't get owner info for filemap: %d\n", @@ -1947,7 +1933,11 @@ void agent_schedule_callback(void (*callback)(void *, void *, int), assert(!"We shouldn't get here"); } -void cleanup_exit(int code) { exit(code); } +void cleanup_exit(int code) +{ + shutdown_help(); + exit(code); +} int flags = FLAG_SYNCAGENT; @@ -1982,10 +1972,9 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) /* * Attempt to get the security API we need. */ - advapi = LoadLibrary("ADVAPI32.DLL"); - getsecurityinfo = - (gsi_fn_t) GetProcAddress(advapi, "GetSecurityInfo"); - if (!getsecurityinfo) { + advapi = load_system32_dll("advapi32.dll"); + GET_WINDOWS_FUNCTION(advapi, GetSecurityInfo); + if (!p_GetSecurityInfo) { MessageBox(NULL, "Unable to access security APIs. Pageant will\n" "not run, in case it causes a security breach.", @@ -2005,22 +1994,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) /* * See if we can find our Help file. */ - { - char b[2048], *p, *q, *r; - FILE *fp; - GetModuleFileName(NULL, b, sizeof(b) - 1); - r = b; - p = strrchr(b, '\\'); - if (p && p >= r) r = p+1; - q = strrchr(b, ':'); - if (q && q >= r) r = q+1; - strcpy(r, PUTTY_HELP_FILE); - if ( (fp = fopen(b, "r")) != NULL) { - help_path = dupstr(b); - fclose(fp); - } else - help_path = NULL; - } + init_help(); /* * Look for the PuTTY binary (we will enable the saved session @@ -2160,7 +2134,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) "&View Keys"); AppendMenu(systray_menu, MF_ENABLED, IDM_ADDKEY, "Add &Key"); AppendMenu(systray_menu, MF_SEPARATOR, 0, 0); - if (help_path) + if (has_help()) AppendMenu(systray_menu, MF_ENABLED, IDM_HELP, "&Help"); AppendMenu(systray_menu, MF_ENABLED, IDM_ABOUT, "&About"); AppendMenu(systray_menu, MF_SEPARATOR, 0, 0); @@ -2200,5 +2174,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) if (advapi) FreeLibrary(advapi); - return msg.wParam; + + cleanup_exit(msg.wParam); + return msg.wParam; /* just in case optimiser complains */ }