From ce5b6c84109c66fbd12f5ee06140c055b8ac06a6 Mon Sep 17 00:00:00 2001 From: Rob Shearman Date: Thu, 25 Oct 2007 19:17:45 +0100 Subject: [PATCH] credui: Add a banner and message box to the dialog presented by CredUIPromptForCredentials. --- dlls/credui/Makefile.in | 2 +- dlls/credui/banner.bmp | Bin 0 -> 9718 bytes dlls/credui/credui.rc | 3 ++ dlls/credui/credui_De.rc | 24 ++++++----- dlls/credui/credui_En.rc | 30 ++++++++----- dlls/credui/credui_Ko.rc | 24 ++++++----- dlls/credui/credui_No.rc | 24 ++++++----- dlls/credui/credui_Pl.rc | 24 ++++++----- dlls/credui/credui_Sv.rc | 24 ++++++----- dlls/credui/credui_main.c | 76 ++++++++++++++++++++++++--------- dlls/credui/credui_resources.h | 8 +++- 11 files changed, 158 insertions(+), 81 deletions(-) create mode 100644 dlls/credui/banner.bmp diff --git a/dlls/credui/Makefile.in b/dlls/credui/Makefile.in index 03b639b2680..b4e1197e461 100644 --- a/dlls/credui/Makefile.in +++ b/dlls/credui/Makefile.in @@ -4,7 +4,7 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = credui.dll IMPORTLIB = libcredui.$(IMPLIBEXT) -IMPORTS = user32 kernel32 +IMPORTS = comctl32 user32 kernel32 C_SRCS = \ credui_main.c diff --git a/dlls/credui/banner.bmp b/dlls/credui/banner.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ac1a4a822e283c522018a6b6bf404e46168dcaf4 GIT binary patch literal 9718 zcmeIuu?+$-3TV%~-wn^tl)-Ym7PN=FG2@T@WBZfB*pk1PBlyK!5-N0t5&U cAV7cs0RjXF5FkK+009C72oNAZfWTh@2PcJpszUsername, user, 256, domain, 256); - if (ret == ERROR_SUCCESS) + if (params->pszMessageText) + SetDlgItemTextW(hwndDlg, IDC_MESSAGE, params->pszMessageText); + else { - SetDlgItemTextW(hwndDlg, IDC_USERNAME, user); - SetDlgItemTextW(hwndDlg, IDC_DOMAIN, domain); + WCHAR format[256]; + WCHAR message[256]; + LoadStringW(hinstCredUI, IDS_MESSAGEFORMAT, format, sizeof(format)/sizeof(format[0])); + snprintfW(message, sizeof(message)/sizeof(message[0]), format, params->pszTargetName); + SetDlgItemTextW(hwndDlg, IDC_MESSAGE, message); } + SetDlgItemTextW(hwndDlg, IDC_USERNAME, params->pszUsername); SetDlgItemTextW(hwndDlg, IDC_PASSWORD, params->pszPassword); - if (ret == ERROR_SUCCESS && user[0]) + if (params->pszUsername[0]) SetFocus(GetDlgItem(hwndDlg, IDC_PASSWORD)); else SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME)); if (params->pszCaptionText) SetWindowTextW(hwndDlg, params->pszCaptionText); + else + { + WCHAR format[256]; + WCHAR title[256]; + LoadStringW(hinstCredUI, IDS_TITLEFORMAT, format, sizeof(format)/sizeof(format[0])); + snprintfW(title, sizeof(title)/sizeof(title[0]), format, params->pszTargetName); + SetWindowTextW(hwndDlg, title); + } + + if (params->dwFlags & (CREDUI_FLAGS_DO_NOT_PERSIST|CREDUI_FLAGS_PERSIST)) + ShowWindow(GetDlgItem(hwndDlg, IDC_SAVE), SW_HIDE); + else if (params->fSave) + CheckDlgButton(hwndDlg, IDC_SAVE, BST_CHECKED); + return FALSE; } case WM_COMMAND: @@ -139,22 +158,40 @@ static INT_PTR CALLBACK CredDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, { case MAKELONG(IDOK, BN_CLICKED): { - ULONG domainlen; struct cred_dialog_params *params = (struct cred_dialog_params *)GetWindowLongPtrW(hwndDlg, DWLP_USER); + HWND hwndUsername = GetDlgItem(hwndDlg, IDC_USERNAME); + LPWSTR user; + INT len; + INT len2; - domainlen = GetDlgItemTextW(hwndDlg, IDC_DOMAIN, - params->pszUsername, - params->ulUsernameMaxChars); - if (domainlen && (domainlen < params->ulUsernameMaxChars)) + len = GetWindowTextLengthW(hwndUsername); + user = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR)); + GetWindowTextW(hwndUsername, user, len + 1); + + if (!user[0]) + return TRUE; + + if (!strchrW(user, '\\') && !strchrW(user, '@')) { - params->pszUsername[domainlen++] = '\\'; - params->pszUsername[domainlen] = '\0'; + INT len_target = strlenW(params->pszTargetName); + memcpy(params->pszUsername, params->pszTargetName, + min(len_target, params->ulUsernameMaxChars) * sizeof(WCHAR)); + if (len_target + 1 < params->ulUsernameMaxChars) + params->pszUsername[len_target] = '\\'; + if (len_target + 2 < params->ulUsernameMaxChars) + params->pszUsername[len_target + 1] = '\0'; } - if (domainlen < params->ulUsernameMaxChars) - GetDlgItemTextW(hwndDlg, IDC_USERNAME, - params->pszUsername + domainlen, - params->ulUsernameMaxChars - domainlen); + else if (params->ulUsernameMaxChars > 0) + params->pszUsername[0] = '\0'; + + len2 = strlenW(params->pszUsername); + memcpy(params->pszUsername + len2, user, min(len, params->ulUsernameMaxChars - len2) * sizeof(WCHAR)); + if (params->ulUsernameMaxChars) + params->pszUsername[len2 + min(len, params->ulUsernameMaxChars - len2 - 1)] = '\0'; + + HeapFree(GetProcessHeap(), 0, user); + GetDlgItemTextW(hwndDlg, IDC_PASSWORD, params->pszPassword, params->ulPasswordMaxChars); @@ -219,6 +256,7 @@ DWORD WINAPI CredUIPromptForCredentialsW(PCREDUI_INFOW pUIInfo, params.pszPassword = pszPassword; params.ulPasswordMaxChars = ulPasswordMaxChars; params.fSave = pfSave ? *pfSave : FALSE; + params.dwFlags = dwFlags; ret = DialogBoxParamW(hinstCredUI, MAKEINTRESOURCEW(IDD_CREDDIALOG), pUIInfo ? pUIInfo->hwndParent : NULL, diff --git a/dlls/credui/credui_resources.h b/dlls/credui/credui_resources.h index c51429503a4..d7acae50779 100644 --- a/dlls/credui/credui_resources.h +++ b/dlls/credui/credui_resources.h @@ -19,5 +19,11 @@ #define IDD_CREDDIALOG 100 #define IDC_USERNAME 101 #define IDC_PASSWORD 102 -#define IDC_DOMAIN 103 +#define IDC_MESSAGE 103 #define IDC_STATIC 104 +#define IDC_SAVE 105 + +#define IDB_BANNER 200 + +#define IDS_TITLEFORMAT 300 +#define IDS_MESSAGEFORMAT 301