From cbf3e61d631985f0d45c76a2cc817638b6f77be3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 7 Jun 2025 22:50:23 +0200 Subject: [PATCH] [USERENV] Implement error reporting via error dialog (#8139) This feature is used to report errors when `LoadUserProfile()` fails. It is also meant to be used by other functions in the future. The error dialog is shown only when the `PI_NOUI` flag is _NOT_ set in `PROFILEINFO::dwFlags`. - Add support for retrieving USERENV-specific registry policies, in a systematic way. - Add support for "timed" dialogs that automatically close after a given timeout has elapsed. The default timeout is controlled by the `"ProfileDlgTimeOut"` policy: https://www.visualautomation.com/comprod/secure6/profile_.htm https://www.infania.net/misc/kbarchive/kb/196/Q196284/index.html - TODO for the future: report the error in the event log. - `LoadUserProfileW()`: Reset `ret` to `FALSE` after the call to `CreateUserProfileW()`; this allows to return failure in case any other function calls down the line fails. (`ret` is set to `TRUE` only when everything has succeeded.) --- dll/win32/userenv/internal.h | 41 ++++ dll/win32/userenv/lang/bg-BG.rc | 12 ++ dll/win32/userenv/lang/cs-CZ.rc | 12 ++ dll/win32/userenv/lang/da-DK.rc | 12 ++ dll/win32/userenv/lang/de-DE.rc | 12 ++ dll/win32/userenv/lang/el-GR.rc | 12 ++ dll/win32/userenv/lang/en-US.rc | 12 ++ dll/win32/userenv/lang/es-ES.rc | 12 ++ dll/win32/userenv/lang/eu-ES.rc | 12 ++ dll/win32/userenv/lang/fi-FI.rc | 12 ++ dll/win32/userenv/lang/fr-FR.rc | 12 ++ dll/win32/userenv/lang/he-IL.rc | 12 ++ dll/win32/userenv/lang/hu-HU.rc | 12 ++ dll/win32/userenv/lang/id-ID.rc | 12 ++ dll/win32/userenv/lang/it-IT.rc | 12 ++ dll/win32/userenv/lang/ja-JP.rc | 12 ++ dll/win32/userenv/lang/lt-LT.rc | 12 ++ dll/win32/userenv/lang/nl-NL.rc | 12 ++ dll/win32/userenv/lang/no-NO.rc | 12 ++ dll/win32/userenv/lang/pl-PL.rc | 12 ++ dll/win32/userenv/lang/pt-BR.rc | 12 ++ dll/win32/userenv/lang/pt-PT.rc | 12 ++ dll/win32/userenv/lang/ro-RO.rc | 12 ++ dll/win32/userenv/lang/ru-RU.rc | 12 ++ dll/win32/userenv/lang/sk-SK.rc | 12 ++ dll/win32/userenv/lang/sq-AL.rc | 15 +- dll/win32/userenv/lang/sv-SE.rc | 12 ++ dll/win32/userenv/lang/th-TH.rc | 12 ++ dll/win32/userenv/lang/tr-TR.rc | 12 ++ dll/win32/userenv/lang/uk-UA.rc | 12 ++ dll/win32/userenv/lang/zh-CN.rc | 12 ++ dll/win32/userenv/lang/zh-HK.rc | 12 ++ dll/win32/userenv/lang/zh-TW.rc | 12 ++ dll/win32/userenv/misc.c | 299 +++++++++++++++++++++++++++++- dll/win32/userenv/profile.c | 63 ++++--- dll/win32/userenv/res/userenv.ico | Bin 0 -> 22486 bytes dll/win32/userenv/resources.h | 12 ++ dll/win32/userenv/userenv.rc | 6 +- 38 files changed, 776 insertions(+), 32 deletions(-) create mode 100644 dll/win32/userenv/res/userenv.ico diff --git a/dll/win32/userenv/internal.h b/dll/win32/userenv/internal.h index 2c1cfeb79b4..c20d65205ba 100644 --- a/dll/win32/userenv/internal.h +++ b/dll/win32/userenv/internal.h @@ -80,6 +80,47 @@ AppendBackslash(LPWSTR String); PSECURITY_DESCRIPTOR CreateDefaultSecurityDescriptor(VOID); + +typedef struct _POLICY_VALUES +{ + PCWSTR ValueName; + DWORD Type; + PVOID Data; + DWORD Length; +} POLICY_VALUES, *PPOLICY_VALUES; + +LONG +GetPolicyValues( + _In_ HKEY hRootKey, + _Inout_ PPOLICY_VALUES QueryTable); + +LONG +GetPolicyValue( + _In_ HKEY hRootKey, + _In_ PCWSTR ValueName, + _In_ DWORD Type, + _Out_opt_ PVOID pData, + _Inout_opt_ PDWORD pcbData); + + +VOID +ReportErrorWorker( + _In_ DWORD dwFlags, + _In_ PCWSTR pszStr); + +VOID +ReportErrorV( + _In_ DWORD dwFlags, + _In_ PCWSTR pszStr, + _In_ va_list args); + +VOID +__cdecl +ReportError( + _In_ DWORD dwFlags, + _In_ PCWSTR pszStr, + ...); + /* profile.c */ BOOL AppendSystemPostfix(LPWSTR lpName, diff --git a/dll/win32/userenv/lang/bg-BG.rc b/dll/win32/userenv/lang/bg-BG.rc index 21da1b64683..07d8f220c48 100644 --- a/dll/win32/userenv/lang/bg-BG.rc +++ b/dll/win32/userenv/lang/bg-BG.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/cs-CZ.rc b/dll/win32/userenv/lang/cs-CZ.rc index 49bee685d17..7a9b34a0a80 100644 --- a/dll/win32/userenv/lang/cs-CZ.rc +++ b/dll/win32/userenv/lang/cs-CZ.rc @@ -5,6 +5,18 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/da-DK.rc b/dll/win32/userenv/lang/da-DK.rc index 9324cf3deeb..213758057d2 100644 --- a/dll/win32/userenv/lang/da-DK.rc +++ b/dll/win32/userenv/lang/da-DK.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/de-DE.rc b/dll/win32/userenv/lang/de-DE.rc index 6bb12707924..8e735411a80 100644 --- a/dll/win32/userenv/lang/de-DE.rc +++ b/dll/win32/userenv/lang/de-DE.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/el-GR.rc b/dll/win32/userenv/lang/el-GR.rc index 657e1c601cc..6cbb58f526f 100644 --- a/dll/win32/userenv/lang/el-GR.rc +++ b/dll/win32/userenv/lang/el-GR.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_GREEK, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/en-US.rc b/dll/win32/userenv/lang/en-US.rc index 448a99170cc..72a2dcfe0ae 100644 --- a/dll/win32/userenv/lang/en-US.rc +++ b/dll/win32/userenv/lang/en-US.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" // "User Environment" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/es-ES.rc b/dll/win32/userenv/lang/es-ES.rc index c5b361df779..3a67a11f3cd 100644 --- a/dll/win32/userenv/lang/es-ES.rc +++ b/dll/win32/userenv/lang/es-ES.rc @@ -9,6 +9,18 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/eu-ES.rc b/dll/win32/userenv/lang/eu-ES.rc index d5320123cb5..d8eea051e6d 100644 --- a/dll/win32/userenv/lang/eu-ES.rc +++ b/dll/win32/userenv/lang/eu-ES.rc @@ -7,6 +7,18 @@ LANGUAGE LANG_BASQUE, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/fi-FI.rc b/dll/win32/userenv/lang/fi-FI.rc index fc5e90c4d1f..86f177d5511 100644 --- a/dll/win32/userenv/lang/fi-FI.rc +++ b/dll/win32/userenv/lang/fi-FI.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/fr-FR.rc b/dll/win32/userenv/lang/fr-FR.rc index 0c2dd616c41..4c693c731ed 100644 --- a/dll/win32/userenv/lang/fr-FR.rc +++ b/dll/win32/userenv/lang/fr-FR.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Profil utilisateur" // "Environnement utilisateur" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Temps restant :", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/he-IL.rc b/dll/win32/userenv/lang/he-IL.rc index 5d2ffedeef5..999fd063704 100644 --- a/dll/win32/userenv/lang/he-IL.rc +++ b/dll/win32/userenv/lang/he-IL.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/hu-HU.rc b/dll/win32/userenv/lang/hu-HU.rc index 9b47e11134e..3d631bda706 100644 --- a/dll/win32/userenv/lang/hu-HU.rc +++ b/dll/win32/userenv/lang/hu-HU.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/id-ID.rc b/dll/win32/userenv/lang/id-ID.rc index 6715e746e99..4bd2e619206 100644 --- a/dll/win32/userenv/lang/id-ID.rc +++ b/dll/win32/userenv/lang/id-ID.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/it-IT.rc b/dll/win32/userenv/lang/it-IT.rc index 704946d78ef..94dbbaba995 100644 --- a/dll/win32/userenv/lang/it-IT.rc +++ b/dll/win32/userenv/lang/it-IT.rc @@ -11,6 +11,18 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/ja-JP.rc b/dll/win32/userenv/lang/ja-JP.rc index b9aef4b977f..4a0ba5d7b39 100644 --- a/dll/win32/userenv/lang/ja-JP.rc +++ b/dll/win32/userenv/lang/ja-JP.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/lt-LT.rc b/dll/win32/userenv/lang/lt-LT.rc index 3a9fda5b1b9..b205adc8415 100644 --- a/dll/win32/userenv/lang/lt-LT.rc +++ b/dll/win32/userenv/lang/lt-LT.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/nl-NL.rc b/dll/win32/userenv/lang/nl-NL.rc index bd648f3b8bf..b4a45624009 100644 --- a/dll/win32/userenv/lang/nl-NL.rc +++ b/dll/win32/userenv/lang/nl-NL.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/no-NO.rc b/dll/win32/userenv/lang/no-NO.rc index 5a1aeaf5481..11e5fb061d1 100644 --- a/dll/win32/userenv/lang/no-NO.rc +++ b/dll/win32/userenv/lang/no-NO.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/pl-PL.rc b/dll/win32/userenv/lang/pl-PL.rc index 46308e7002f..8a52ab2be9b 100644 --- a/dll/win32/userenv/lang/pl-PL.rc +++ b/dll/win32/userenv/lang/pl-PL.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/pt-BR.rc b/dll/win32/userenv/lang/pt-BR.rc index ecbee96f31b..9c0d6a780b6 100644 --- a/dll/win32/userenv/lang/pt-BR.rc +++ b/dll/win32/userenv/lang/pt-BR.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/pt-PT.rc b/dll/win32/userenv/lang/pt-PT.rc index 7f667b4726e..52797c47413 100644 --- a/dll/win32/userenv/lang/pt-PT.rc +++ b/dll/win32/userenv/lang/pt-PT.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/ro-RO.rc b/dll/win32/userenv/lang/ro-RO.rc index bd3a3f2778e..27c7e41e277 100644 --- a/dll/win32/userenv/lang/ro-RO.rc +++ b/dll/win32/userenv/lang/ro-RO.rc @@ -8,6 +8,18 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/ru-RU.rc b/dll/win32/userenv/lang/ru-RU.rc index 0705a7c4bde..8919d50b563 100644 --- a/dll/win32/userenv/lang/ru-RU.rc +++ b/dll/win32/userenv/lang/ru-RU.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/sk-SK.rc b/dll/win32/userenv/lang/sk-SK.rc index 5b476dd5068..7fcb4be0091 100644 --- a/dll/win32/userenv/lang/sk-SK.rc +++ b/dll/win32/userenv/lang/sk-SK.rc @@ -5,6 +5,18 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/sq-AL.rc b/dll/win32/userenv/lang/sq-AL.rc index 5aab4ba11f0..42024239253 100644 --- a/dll/win32/userenv/lang/sq-AL.rc +++ b/dll/win32/userenv/lang/sq-AL.rc @@ -1,10 +1,21 @@ /* TRANSLATOR : Ardit Dani (Ard1t) (ardit.dani@gmail.com) * DATE OF TRANSLATION: 06-02-2014 -*/ - + */ LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/sv-SE.rc b/dll/win32/userenv/lang/sv-SE.rc index eb7c1ed3e2e..a6186c103b1 100644 --- a/dll/win32/userenv/lang/sv-SE.rc +++ b/dll/win32/userenv/lang/sv-SE.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/th-TH.rc b/dll/win32/userenv/lang/th-TH.rc index e85d0e8b802..3a2f8b75bc4 100644 --- a/dll/win32/userenv/lang/th-TH.rc +++ b/dll/win32/userenv/lang/th-TH.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_THAI, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/tr-TR.rc b/dll/win32/userenv/lang/tr-TR.rc index c0ce85e9aef..8359d30feb6 100644 --- a/dll/win32/userenv/lang/tr-TR.rc +++ b/dll/win32/userenv/lang/tr-TR.rc @@ -2,6 +2,18 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/uk-UA.rc b/dll/win32/userenv/lang/uk-UA.rc index a43432f02af..f4ee8628506 100644 --- a/dll/win32/userenv/lang/uk-UA.rc +++ b/dll/win32/userenv/lang/uk-UA.rc @@ -1,5 +1,17 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/zh-CN.rc b/dll/win32/userenv/lang/zh-CN.rc index d5bb8e2f521..0ae16667cf7 100644 --- a/dll/win32/userenv/lang/zh-CN.rc +++ b/dll/win32/userenv/lang/zh-CN.rc @@ -6,6 +6,18 @@ English folder names into Chinese, or it may cause problems in the system. */ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/zh-HK.rc b/dll/win32/userenv/lang/zh-HK.rc index 76fe017dd39..59252d773ea 100644 --- a/dll/win32/userenv/lang/zh-HK.rc +++ b/dll/win32/userenv/lang/zh-HK.rc @@ -12,6 +12,18 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/lang/zh-TW.rc b/dll/win32/userenv/lang/zh-TW.rc index 019c3f1d122..c5b985f1605 100644 --- a/dll/win32/userenv/lang/zh-TW.rc +++ b/dll/win32/userenv/lang/zh-TW.rc @@ -5,6 +5,18 @@ English folder names into Chinese, or it may cause problems in the system. */ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL +IDD_ERRORDLG DIALOGEX 0, 0, 250, 95 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "User Profile" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERENV, IDC_STATIC, 6, 10, 18, 20 + DEFPUSHBUTTON "OK", IDOK, 190, 10, 50, 14, BS_NOTIFY | WS_TABSTOP + EDITTEXT IDC_ERRORDESC, 37, 10, 145, 66, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER | WS_TABSTOP + RTEXT "Time remaining:", IDC_TIMEOUTSTATIC, 172, 80, 54, 8 + LTEXT "", IDC_TIMEOUT, 230, 80, 12, 8 +END + /* See also: dll/win32/shell32/lang */ STRINGTABLE BEGIN diff --git a/dll/win32/userenv/misc.c b/dll/win32/userenv/misc.c index 214d8f1f448..cbf9000ab38 100644 --- a/dll/win32/userenv/misc.c +++ b/dll/win32/userenv/misc.c @@ -25,9 +25,10 @@ */ #include "precomp.h" - #include +#include "resources.h" + #define NDEBUG #include @@ -52,7 +53,6 @@ AppendBackslash(LPWSTR String) return &String[Length]; } - PSECURITY_DESCRIPTOR CreateDefaultSecurityDescriptor(VOID) { @@ -198,6 +198,299 @@ Cleanup: return pSD; } +/* Policy values helpers *****************************************************/ + +LONG +GetPolicyValues( + _In_ HKEY hRootKey, + _Inout_ PPOLICY_VALUES QueryTable) +{ + static PCWSTR PolicyKeys[] = + { + L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", + L"Software\\Policies\\Microsoft\\Windows\\System" + }; + + /* Retrieve the sought policy values in each of the policy keys */ + DWORD i; + for (i = 0; i < _countof(PolicyKeys); ++i) + { + HKEY hKey; + PPOLICY_VALUES Value; + DWORD dwType, cbData; + + if (RegOpenKeyExW(hRootKey, PolicyKeys[i], 0, + KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS) + { + continue; + } + + for (Value = QueryTable; Value->ValueName || Value->Data; ++Value) + { + /* Retrieve the type and data length for validation checks */ + if (RegQueryValueExW(hKey, Value->ValueName, NULL, + &dwType, NULL, &cbData) != ERROR_SUCCESS) + { + continue; + } + + /* Verify for compatible types */ + if ( ((Value->Type == REG_SZ || Value->Type == REG_EXPAND_SZ) && + (dwType == REG_SZ || dwType == REG_EXPAND_SZ)) || + (Value->Type == REG_DWORD && dwType == REG_DWORD) || + (Value->Type == REG_QWORD && dwType == REG_QWORD) || + (Value->Type == REG_MULTI_SZ && dwType == REG_MULTI_SZ) || + (Value->Type == REG_NONE || Value->Type == REG_BINARY) ) + { + /* Verify whether the given buffer can hold the data; + * if so, retrieve the actual data */ + if (Value->Length >= cbData) + { + RegQueryValueExW(hKey, Value->ValueName, NULL, + &dwType, Value->Data, &cbData); + } + } + } + RegCloseKey(hKey); + } + + return ERROR_SUCCESS; +} + +LONG +GetPolicyValue( + _In_ HKEY hRootKey, + _In_ PCWSTR ValueName, + _In_ DWORD Type, + _Out_opt_ PVOID pData, + _Inout_opt_ PDWORD pcbData) +{ + POLICY_VALUES QueryTable[] = + { + {ValueName, Type, pData, pcbData ? *pcbData : 0}, + {NULL, 0, NULL, 0} + }; + LONG ret = GetPolicyValues(hRootKey, QueryTable); + if ((ret == ERROR_SUCCESS) && pcbData) + *pcbData = QueryTable[0].Length; + + return ret; +} + +/* Timed dialog helpers ******************************************************/ + +#define IDT_DLGTIMER 1 + +typedef struct _TIMERDLG_BUTTON +{ + UINT uID; + INT_PTR nResult; +} TIMERDLG_BUTTON, *PTIMERDLG_BUTTON; + +typedef struct _TIMERDLG_INFO +{ + ULONG ulTimeout; ///< Dialog timeout. + WORD wDefBtnOnTimeout; ///< Index in button map for the default action on timeout. + WORD wDefBtnOnCancel; ///< Index in button map for the default action on dialog cancel. + TIMERDLG_BUTTON ButtonMap[2]; ///< Button/result map for the 1st and 2nd buttons. +} TIMERDLG_INFO, *PTIMERDLG_INFO; + +static INT_PTR +CALLBACK +TimerDlgProc( + _Inout_ PTIMERDLG_INFO Info, + _In_ HWND hDlg, + _In_ UINT uMsg, + _In_ WPARAM wParam, + _In_ LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + /* Setup the timeout */ + if (Info->ulTimeout) + { + /* Display the countdown */ + WCHAR szTimeout[10]; + StringCchPrintfW(szTimeout, _countof(szTimeout), L"%d", Info->ulTimeout); + SetDlgItemTextW(hDlg, IDC_TIMEOUT, szTimeout); + + /* Set a 1-second timer */ + SetTimer(hDlg, IDT_DLGTIMER, 1000, NULL); + } + break; + } + + case WM_COMMAND: + { + PTIMERDLG_BUTTON ButtonMap = Info->ButtonMap; + WORD wDefBtnOnTimeout = min(Info->wDefBtnOnTimeout, _countof(Info->ButtonMap)-1); + WORD i; + + if (LOWORD(wParam) == IDCANCEL) + { + /* ESC or CANCEL button pressed: stop the timeout, + * close the dialog and return the default result */ + WORD wDefBtnOnCancel = min(Info->wDefBtnOnCancel, _countof(Info->ButtonMap)-1); + KillTimer(hDlg, IDT_DLGTIMER); + EndDialog(hDlg, ButtonMap[wDefBtnOnCancel].nResult); + break; + } + + for (i = 0; i < _countof(Info->ButtonMap); ++i) + { + if (LOWORD(wParam) == ButtonMap[i].uID) + { + if (HIWORD(wParam) == BN_CLICKED) + { + /* Button pressed: stop the timeout, close the + * dialog and return the corresponding result */ + KillTimer(hDlg, IDT_DLGTIMER); + EndDialog(hDlg, ButtonMap[i].nResult); + } + else if (HIWORD(wParam) == BN_KILLFOCUS) + { + /* Button lost the focus: stop the timeout + * only if this isn't the default action */ + if (i != wDefBtnOnTimeout) + break; + KillTimer(hDlg, IDT_DLGTIMER); + ShowWindow(GetDlgItem(hDlg, IDC_TIMEOUT), SW_HIDE); + ShowWindow(GetDlgItem(hDlg, IDC_TIMEOUTSTATIC), SW_HIDE); + } + break; + } + } + break; + } + + case WM_TIMER: + { + if (Info->ulTimeout < 1) + { + /* Timeout ended, close the dialog */ + WORD wDefBtnOnTimeout = min(Info->wDefBtnOnTimeout, _countof(Info->ButtonMap)-1); + PostMessageW(hDlg, WM_COMMAND, + MAKEWPARAM(Info->ButtonMap[wDefBtnOnTimeout].uID, BN_CLICKED), + 0); + } + else + { + /* Decrement and display the countdown */ + WCHAR szTimeout[10]; + StringCchPrintfW(szTimeout, _countof(szTimeout), L"%d", --(Info->ulTimeout)); + SetDlgItemTextW(hDlg, IDC_TIMEOUT, szTimeout); + } + break; + } + } + + return FALSE; +} + +/* Error reporting helpers ***************************************************/ + +typedef struct _ERRORDLG_PARAMS +{ + ULONG ulTimeout; + PCWSTR pszString; +} ERRORDLG_PARAMS, *PERRORDLG_PARAMS; + +static TIMERDLG_INFO ErrorDlg = +{ + 0, ///< Global error-dialog timeout, used for all displayed error dialogs. + 0, 1, + {{IDOK, TRUE}, {IDCANCEL, FALSE}} +}; + +static INT_PTR +CALLBACK +ErrorDlgProc( + _In_ HWND hDlg, + _In_ UINT uMsg, + _In_ WPARAM wParam, + _In_ LPARAM lParam) +{ + if (uMsg == WM_INITDIALOG) + { + PERRORDLG_PARAMS Params = (PERRORDLG_PARAMS)lParam; + + /* Position and focus the dialog */ + // CenterWindow(hDlg); // Already done with the DS_CENTER style. + SetForegroundWindow(hDlg); + + /* Display the message */ + SetDlgItemTextW(hDlg, IDC_ERRORDESC, Params->pszString); + + /* Setup the timeout and display the countdown */ + ErrorDlg.ulTimeout = Params->ulTimeout; + // SetWindowLongPtrW(hDlg, DWLP_USER, &ErrorDlg); + TimerDlgProc(&ErrorDlg, hDlg, WM_INITDIALOG, wParam, lParam); + return TRUE; + } + return TimerDlgProc(&ErrorDlg, hDlg, uMsg, wParam, lParam); +} + +VOID +ErrorDialogEx( + _In_ ULONG ulTimeout, + _In_ PCWSTR pszString) +{ + ERRORDLG_PARAMS Params = {ulTimeout, pszString}; + DialogBoxParamW(hInstance, MAKEINTRESOURCEW(IDD_ERRORDLG), + NULL, ErrorDlgProc, (LPARAM)&Params); +} + +VOID +ReportErrorWorker( + _In_ DWORD dwFlags, + _In_ PCWSTR pszStr) +{ + // TODO: Report event to Application log, "Userenv" source. + DPRINT1("%S", pszStr); + + if (!(dwFlags & PI_NOUI)) + { + /* Retrieve the "Profile Dialog Time Out" policy value, + * defaulting to 30 seconds timeout */ + ULONG ulTimeout = 30; + DWORD cbData = sizeof(ulTimeout); + GetPolicyValue(HKEY_LOCAL_MACHINE, + L"ProfileDlgTimeOut", + REG_DWORD, + &ulTimeout, + &cbData); + ErrorDialogEx(ulTimeout, pszStr); + } +} + +VOID +ReportErrorV( + _In_ DWORD dwFlags, + _In_ PCWSTR pszStr, + _In_ va_list args) +{ + WCHAR Buffer[4096]; + _vsnwprintf(Buffer, _countof(Buffer), pszStr, args); + ReportErrorWorker(dwFlags, Buffer); +} + +VOID +__cdecl +ReportError( + _In_ DWORD dwFlags, + _In_ PCWSTR pszStr, + ...) +{ + va_list args; + + va_start(args, pszStr); + ReportErrorV(dwFlags, pszStr, args); + va_end(args); +} + + /* Dynamic DLL loading interface **********************************************/ /* OLE32.DLL import table */ @@ -212,7 +505,6 @@ DYN_MODULE DynOle32 = } }; - /* * Use this function to load functions from other modules. We cannot statically * link to e.g. ole32.dll because those dlls would get loaded on startup with @@ -254,7 +546,6 @@ LoadDynamicImports(PDYN_MODULE Module, return TRUE; } - VOID UnloadDynamicImports(PDYN_FUNCS DynFuncs) { diff --git a/dll/win32/userenv/profile.c b/dll/win32/userenv/profile.c index 0e7a9295242..d23a8d118c1 100644 --- a/dll/win32/userenv/profile.c +++ b/dll/win32/userenv/profile.c @@ -2007,12 +2007,12 @@ LoadUserProfileW( _Inout_ LPPROFILEINFOW lpProfileInfo) { WCHAR szUserHivePath[MAX_PATH]; + DWORD dwLength = _countof(szUserHivePath); PTOKEN_USER UserSid = NULL; UNICODE_STRING SidString = { 0, 0, NULL }; HANDLE hProfileMutex = NULL; - LONG Error; + DWORD dwError = MAXDWORD; BOOL ret = FALSE; - DWORD dwLength = sizeof(szUserHivePath) / sizeof(szUserHivePath[0]); DPRINT("LoadUserProfileW(%p %p)\n", hToken, lpProfileInfo); @@ -2083,15 +2083,15 @@ LoadUserProfileW( if (GetTokenInformation(hToken, TokenUser, NULL, 0, &dwLength) || GetLastError() != ERROR_INSUFFICIENT_BUFFER) { - DPRINT1 ("GetTokenInformation() failed\n"); + DPRINT1("GetTokenInformation() failed\n"); goto cleanup; } UserSid = (PTOKEN_USER)HeapAlloc(GetProcessHeap(), 0, dwLength); if (!UserSid) { + dwError = ERROR_NOT_ENOUGH_MEMORY; DPRINT1("HeapAlloc() failed\n"); - SetLastError(ERROR_NOT_ENOUGH_MEMORY); goto cleanup; } @@ -2108,6 +2108,7 @@ LoadUserProfileW( DPRINT1("CreateUserProfileW() failed\n"); goto cleanup; } + ret = FALSE; } /* Acquire restore privilege */ @@ -2117,20 +2118,19 @@ LoadUserProfileW( goto cleanup; } - /* Load user registry hive */ - Error = RegLoadKeyW(HKEY_USERS, - SidString.Buffer, - szUserHivePath); + /* Load the user registry hive */ + dwError = RegLoadKeyW(HKEY_USERS, + SidString.Buffer, + szUserHivePath); AcquireRemoveRestorePrivilege(FALSE); /* HACK: Do not fail if the profile has already been loaded! */ - if (Error == ERROR_SHARING_VIOLATION) - Error = ERROR_SUCCESS; + if (dwError == ERROR_SHARING_VIOLATION) + dwError = ERROR_SUCCESS; - if (Error != ERROR_SUCCESS) + if (dwError != ERROR_SUCCESS) { - DPRINT1("RegLoadKeyW() failed (Error %ld)\n", Error); - SetLastError((DWORD)Error); + DPRINT1("RegLoadKeyW() failed (Error %ld)\n", dwError); goto cleanup; } @@ -2140,29 +2140,30 @@ LoadUserProfileW( } /* Open future HKEY_CURRENT_USER */ - Error = RegOpenKeyExW(HKEY_USERS, - SidString.Buffer, - 0, - MAXIMUM_ALLOWED, - (PHKEY)&lpProfileInfo->hProfile); - if (Error != ERROR_SUCCESS) + dwError = RegOpenKeyExW(HKEY_USERS, + SidString.Buffer, + 0, + MAXIMUM_ALLOWED, + (PHKEY)&lpProfileInfo->hProfile); + if (dwError != ERROR_SUCCESS) { - DPRINT1("RegOpenKeyExW() failed (Error %ld)\n", Error); - SetLastError((DWORD)Error); + DPRINT1("RegOpenKeyExW() failed (Error %ld)\n", dwError); goto cleanup; } - Error = IncrementRefCount(SidString.Buffer, NULL); - if (Error != ERROR_SUCCESS) + dwError = IncrementRefCount(SidString.Buffer, NULL); + if (dwError != ERROR_SUCCESS) { - DPRINT1("IncrementRefCount() failed (Error %ld)\n", Error); - SetLastError((DWORD)Error); + DPRINT1("IncrementRefCount() failed (Error %ld)\n", dwError); goto cleanup; } ret = TRUE; cleanup: + if (dwError == MAXDWORD) + dwError = GetLastError(); + if (UserSid != NULL) HeapFree(GetProcessHeap(), 0, UserSid); @@ -2174,7 +2175,19 @@ cleanup: RtlFreeUnicodeString(&SidString); + /* Report any error occurred */ + if (!ret) + { + // TODO: Use a localized *.mc resource message* error. + ReportError(lpProfileInfo->dwFlags, + L"ReactOS could not load the locally stored user profile. " + L"Possible causes of this error include insufficient security rights or a corrupt local profile.\n" + L"\nError: %lu\n", + dwError); + } + DPRINT("LoadUserProfileW() done\n"); + SetLastError(dwError); return ret; } diff --git a/dll/win32/userenv/res/userenv.ico b/dll/win32/userenv/res/userenv.ico new file mode 100644 index 0000000000000000000000000000000000000000..cf1e2e4d809af2dd6af05201348dc25bb1b03f7e GIT binary patch literal 22486 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 TRu~#kePhBta6MK4f?NG>yur!u literal 0 HcmV?d00001 diff --git a/dll/win32/userenv/resources.h b/dll/win32/userenv/resources.h index 43202a0394b..5ba934705c1 100644 --- a/dll/win32/userenv/resources.h +++ b/dll/win32/userenv/resources.h @@ -8,6 +8,18 @@ #pragma once +#define IDC_STATIC (-1) + +/* Icons */ +#define IDI_USERENV 1 + +/* Dialogs */ +#define IDD_ERRORDLG 3000 +#define IDC_ERRORDESC 3001 +#define IDC_TIMEOUTSTATIC 1005 +#define IDC_TIMEOUT 1004 + +/* Strings */ #define IDS_PROFILEPATH 1 #define IDS_APPDATA 2 #define IDS_DESKTOP 3 diff --git a/dll/win32/userenv/userenv.rc b/dll/win32/userenv/userenv.rc index f3bb49cb55f..b36f85cee92 100644 --- a/dll/win32/userenv/userenv.rc +++ b/dll/win32/userenv/userenv.rc @@ -1,4 +1,5 @@ -/* Copyright (C) 2004 Eric Kohl +/* + * Copyright (C) 2004 Eric Kohl * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,6 +17,7 @@ */ #include +#include #include "resources.h" @@ -30,6 +32,8 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDI_USERENV ICON "res/userenv.ico" + /* * Everything specific to any language goes in one of the specific * files. Note that you can and may override resources which also have