Author: ekohl
Date: Sat Jan 18 14:26:07 2014
New Revision: 61676
URL:
http://svn.reactos.org/svn/reactos?rev=61676&view=rev
Log:
[SYSSETUP]
Use the administrator name, domain and password for the logon hack and store them in the
registry for later use by winlogon if the AutoAdminLogon option is enabled.
CORE-7722 #resolve
Modified:
trunk/reactos/boot/bootdata/hivesft.inf
trunk/reactos/dll/win32/syssetup/globals.h
trunk/reactos/dll/win32/syssetup/install.c
trunk/reactos/dll/win32/syssetup/security.c
Modified: trunk/reactos/boot/bootdata/hivesft.inf
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/hivesft.inf?…
==============================================================================
--- trunk/reactos/boot/bootdata/hivesft.inf [iso-8859-1] (original)
+++ trunk/reactos/boot/bootdata/hivesft.inf [iso-8859-1] Sat Jan 18 14:26:07 2014
@@ -1075,8 +1075,8 @@
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon","Userinit",0x00020000,"%SystemRoot%\system32\userinit.exe"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon","AutoAdminLogon",0x00000000,"1"
-HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon","DefaultUserName",0x00000000,"Administrator"
-;HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon","DefaultPassword",0x00000000,"Secret"
+HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon","DefaultDomain",0x00000000,""
+HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon","DefaultUserName",0x00000000,""
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon","DefaultPassword",0x00000000,""
; Time Zone Servers
Modified: trunk/reactos/dll/win32/syssetup/globals.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/globals…
==============================================================================
--- trunk/reactos/dll/win32/syssetup/globals.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/syssetup/globals.h [iso-8859-1] Sat Jan 18 14:26:07 2014
@@ -56,10 +56,17 @@
LCID LocaleID;
} SETUPDATA, *PSETUPDATA;
+typedef struct _ADMIN_INFO
+{
+ LPWSTR Name;
+ LPWSTR Domain;
+ LPWSTR Password;
+} ADMIN_INFO, *PADMIN_INFO;
extern HINSTANCE hDllInstance;
extern HINF hSysSetupInf;
extern SETUPDATA SetupData;
+extern ADMIN_INFO AdminInfo;
BOOL RegisterTypeLibraries (HINF hinf, LPCWSTR szSection);
@@ -70,6 +77,9 @@
NTSTATUS
SetAdministratorPassword(LPCWSTR Password);
+VOID
+SetAutoAdminLogon(VOID);
+
/* wizard.c */
VOID InstallWizard (VOID);
Modified: trunk/reactos/dll/win32/syssetup/install.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/install…
==============================================================================
--- trunk/reactos/dll/win32/syssetup/install.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/syssetup/install.c [iso-8859-1] Sat Jan 18 14:26:07 2014
@@ -39,6 +39,7 @@
/* GLOBALS ******************************************************************/
HINF hSysSetupInf = INVALID_HANDLE_VALUE;
+ADMIN_INFO AdminInfo;
/* FUNCTIONS ****************************************************************/
@@ -905,6 +906,8 @@
InstallSecurity();
+ SetAutoAdminLogon();
+
hShortcutsInf = SetupOpenInfFileW(L"shortcuts.inf",
NULL,
INF_STYLE_WIN4,
@@ -933,7 +936,12 @@
HANDLE hToken;
BOOL ret;
- ret = LogonUserW(L"Administrator", L"", L"",
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken);
+ ret = LogonUserW(AdminInfo.Name,
+ AdminInfo.Domain,
+ AdminInfo.Password,
+ LOGON32_LOGON_INTERACTIVE,
+ LOGON32_PROVIDER_DEFAULT,
+ &hToken);
if (!ret)
{
FatalError("LogonUserW() failed!");
@@ -959,6 +967,15 @@
LogItem(SYSSETUP_SEVERITY_INFORMATION, L"Installing ReactOS done");
TerminateSetupActionLog();
+ if (AdminInfo.Name != NULL)
+ RtlFreeHeap(RtlGetProcessHeap(), 0, AdminInfo.Name);
+
+ if (AdminInfo.Domain != NULL)
+ RtlFreeHeap(RtlGetProcessHeap(), 0, AdminInfo.Domain);
+
+ if (AdminInfo.Password != NULL)
+ RtlFreeHeap(RtlGetProcessHeap(), 0, AdminInfo.Password);
+
/* Get shutdown privilege */
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token))
{
Modified: trunk/reactos/dll/win32/syssetup/security.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/securit…
==============================================================================
--- trunk/reactos/dll/win32/syssetup/security.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/syssetup/security.c [iso-8859-1] Sat Jan 18 14:26:07 2014
@@ -317,6 +317,7 @@
SetAdministratorPassword(LPCWSTR Password)
{
PPOLICY_ACCOUNT_DOMAIN_INFO OrigInfo = NULL;
+ PUSER_ACCOUNT_NAME_INFORMATION AccountNameInfo = NULL;
USER_SET_PASSWORD_INFORMATION PasswordInfo;
LSA_OBJECT_ATTRIBUTES ObjectAttributes;
LSA_HANDLE PolicyHandle = NULL;
@@ -370,8 +371,8 @@
}
Status = SamOpenUser(DomainHandle,
- USER_FORCE_PASSWORD_CHANGE,
- DOMAIN_USER_RID_ADMIN, /* 500 */
+ USER_FORCE_PASSWORD_CHANGE | USER_READ_GENERAL,
+ DOMAIN_USER_RID_ADMIN,
&UserHandle);
if (!NT_SUCCESS(Status))
{
@@ -391,7 +392,45 @@
goto done;
}
+ Status = SamQueryInformationUser(UserHandle,
+ UserAccountNameInformation,
+ (PVOID*)&AccountNameInfo);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("SamSetInformationUser() failed (Status %08lx)\n", Status);
+ goto done;
+ }
+
+ AdminInfo.Name = RtlAllocateHeap(RtlGetProcessHeap(),
+ HEAP_ZERO_MEMORY,
+ AccountNameInfo->UserName.Length +
sizeof(WCHAR));
+ if (AdminInfo.Name != NULL)
+ RtlCopyMemory(AdminInfo.Name,
+ AccountNameInfo->UserName.Buffer,
+ AccountNameInfo->UserName.Length);
+
+ AdminInfo.Domain = RtlAllocateHeap(RtlGetProcessHeap(),
+ HEAP_ZERO_MEMORY,
+ OrigInfo->DomainName.Length + sizeof(WCHAR));
+ if (AdminInfo.Domain != NULL)
+ RtlCopyMemory(AdminInfo.Domain,
+ OrigInfo->DomainName.Buffer,
+ OrigInfo->DomainName.Length);
+
+ AdminInfo.Password = RtlAllocateHeap(RtlGetProcessHeap(),
+ 0,
+ (wcslen(Password) + 1) * sizeof(WCHAR));
+ if (AdminInfo.Password != NULL)
+ wcscpy(AdminInfo.Password, Password);
+
+ DPRINT1("Administrator Name: %S\n", AdminInfo.Name);
+ DPRINT1("Administrator Domain: %S\n", AdminInfo.Domain);
+ DPRINT1("Administrator Password: %S\n", AdminInfo.Password);
+
done:
+ if (AccountNameInfo != NULL)
+ SamFreeMemory(AccountNameInfo);
+
if (OrigInfo != NULL)
LsaFreeMemory(OrigInfo);
@@ -412,5 +451,63 @@
return Status;
}
+
+VOID
+SetAutoAdminLogon(VOID)
+{
+ WCHAR szAutoAdminLogon[2];
+ HKEY hKey = NULL;
+ DWORD dwType;
+ DWORD dwSize;
+ LONG lError;
+
+ lError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
+ L"SOFTWARE\\Microsoft\\Windows
NT\\CurrentVersion\\Winlogon",
+ 0,
+ KEY_READ | KEY_WRITE,
+ &hKey);
+ if (lError != ERROR_SUCCESS)
+ return;
+
+ dwSize = 2 * sizeof(WCHAR);
+ lError = RegQueryValueExW(hKey,
+ L"AutoAdminLogon",
+ NULL,
+ &dwType,
+ (LPBYTE)szAutoAdminLogon,
+ &dwSize);
+ if (lError != ERROR_SUCCESS)
+ goto done;
+
+ if (wcscmp(szAutoAdminLogon, L"1") == 0)
+ {
+ RegSetValueExW(hKey,
+ L"DefaultDomain",
+ 0,
+ REG_SZ,
+ (LPBYTE)AdminInfo.Domain,
+ (wcslen(AdminInfo.Domain) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hKey,
+ L"DefaultUserName",
+ 0,
+ REG_SZ,
+ (LPBYTE)AdminInfo.Name,
+ (wcslen(AdminInfo.Name) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hKey,
+ L"DefaultPassword",
+ 0,
+ REG_SZ,
+ (LPBYTE)AdminInfo.Password,
+ (wcslen(AdminInfo.Password) + 1) * sizeof(WCHAR));
+ }
+
+done:
+ if (hKey != NULL)
+ RegCloseKey(hKey);
+}
+
+
/* EOF */