mirror of
https://github.com/reactos/reactos.git
synced 2025-05-08 19:27:00 +00:00
[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 svn path=/trunk/; revision=61676
This commit is contained in:
parent
097e963a80
commit
f197d41a72
4 changed files with 129 additions and 5 deletions
|
@ -1075,8 +1075,8 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","ConsoleShell",0x00
|
||||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe"
|
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","Userinit",0x00020000,"%SystemRoot%\system32\userinit.exe"
|
||||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","AutoAdminLogon",0x00000000,"1"
|
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","DefaultDomain",0x00000000,""
|
||||||
;HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultPassword",0x00000000,"Secret"
|
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultUserName",0x00000000,""
|
||||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultPassword",0x00000000,""
|
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultPassword",0x00000000,""
|
||||||
|
|
||||||
; Time Zone Servers
|
; Time Zone Servers
|
||||||
|
|
|
@ -56,10 +56,17 @@ typedef struct _SETUPDATA
|
||||||
LCID LocaleID;
|
LCID LocaleID;
|
||||||
} SETUPDATA, *PSETUPDATA;
|
} SETUPDATA, *PSETUPDATA;
|
||||||
|
|
||||||
|
typedef struct _ADMIN_INFO
|
||||||
|
{
|
||||||
|
LPWSTR Name;
|
||||||
|
LPWSTR Domain;
|
||||||
|
LPWSTR Password;
|
||||||
|
} ADMIN_INFO, *PADMIN_INFO;
|
||||||
|
|
||||||
extern HINSTANCE hDllInstance;
|
extern HINSTANCE hDllInstance;
|
||||||
extern HINF hSysSetupInf;
|
extern HINF hSysSetupInf;
|
||||||
extern SETUPDATA SetupData;
|
extern SETUPDATA SetupData;
|
||||||
|
extern ADMIN_INFO AdminInfo;
|
||||||
|
|
||||||
BOOL RegisterTypeLibraries (HINF hinf, LPCWSTR szSection);
|
BOOL RegisterTypeLibraries (HINF hinf, LPCWSTR szSection);
|
||||||
|
|
||||||
|
@ -70,6 +77,9 @@ VOID InstallSecurity(VOID);
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
SetAdministratorPassword(LPCWSTR Password);
|
SetAdministratorPassword(LPCWSTR Password);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
SetAutoAdminLogon(VOID);
|
||||||
|
|
||||||
/* wizard.c */
|
/* wizard.c */
|
||||||
VOID InstallWizard (VOID);
|
VOID InstallWizard (VOID);
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ CMP_WaitNoPendingInstallEvents(DWORD dwTimeout);
|
||||||
/* GLOBALS ******************************************************************/
|
/* GLOBALS ******************************************************************/
|
||||||
|
|
||||||
HINF hSysSetupInf = INVALID_HANDLE_VALUE;
|
HINF hSysSetupInf = INVALID_HANDLE_VALUE;
|
||||||
|
ADMIN_INFO AdminInfo;
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* FUNCTIONS ****************************************************************/
|
||||||
|
|
||||||
|
@ -905,6 +906,8 @@ InstallReactOS(HINSTANCE hInstance)
|
||||||
|
|
||||||
InstallSecurity();
|
InstallSecurity();
|
||||||
|
|
||||||
|
SetAutoAdminLogon();
|
||||||
|
|
||||||
hShortcutsInf = SetupOpenInfFileW(L"shortcuts.inf",
|
hShortcutsInf = SetupOpenInfFileW(L"shortcuts.inf",
|
||||||
NULL,
|
NULL,
|
||||||
INF_STYLE_WIN4,
|
INF_STYLE_WIN4,
|
||||||
|
@ -933,7 +936,12 @@ InstallReactOS(HINSTANCE hInstance)
|
||||||
HANDLE hToken;
|
HANDLE hToken;
|
||||||
BOOL ret;
|
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)
|
if (!ret)
|
||||||
{
|
{
|
||||||
FatalError("LogonUserW() failed!");
|
FatalError("LogonUserW() failed!");
|
||||||
|
@ -959,6 +967,15 @@ InstallReactOS(HINSTANCE hInstance)
|
||||||
LogItem(SYSSETUP_SEVERITY_INFORMATION, L"Installing ReactOS done");
|
LogItem(SYSSETUP_SEVERITY_INFORMATION, L"Installing ReactOS done");
|
||||||
TerminateSetupActionLog();
|
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 */
|
/* Get shutdown privilege */
|
||||||
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token))
|
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token))
|
||||||
{
|
{
|
||||||
|
|
|
@ -317,6 +317,7 @@ NTSTATUS
|
||||||
SetAdministratorPassword(LPCWSTR Password)
|
SetAdministratorPassword(LPCWSTR Password)
|
||||||
{
|
{
|
||||||
PPOLICY_ACCOUNT_DOMAIN_INFO OrigInfo = NULL;
|
PPOLICY_ACCOUNT_DOMAIN_INFO OrigInfo = NULL;
|
||||||
|
PUSER_ACCOUNT_NAME_INFORMATION AccountNameInfo = NULL;
|
||||||
USER_SET_PASSWORD_INFORMATION PasswordInfo;
|
USER_SET_PASSWORD_INFORMATION PasswordInfo;
|
||||||
LSA_OBJECT_ATTRIBUTES ObjectAttributes;
|
LSA_OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
LSA_HANDLE PolicyHandle = NULL;
|
LSA_HANDLE PolicyHandle = NULL;
|
||||||
|
@ -370,8 +371,8 @@ SetAdministratorPassword(LPCWSTR Password)
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = SamOpenUser(DomainHandle,
|
Status = SamOpenUser(DomainHandle,
|
||||||
USER_FORCE_PASSWORD_CHANGE,
|
USER_FORCE_PASSWORD_CHANGE | USER_READ_GENERAL,
|
||||||
DOMAIN_USER_RID_ADMIN, /* 500 */
|
DOMAIN_USER_RID_ADMIN,
|
||||||
&UserHandle);
|
&UserHandle);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -391,7 +392,45 @@ SetAdministratorPassword(LPCWSTR Password)
|
||||||
goto done;
|
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:
|
done:
|
||||||
|
if (AccountNameInfo != NULL)
|
||||||
|
SamFreeMemory(AccountNameInfo);
|
||||||
|
|
||||||
if (OrigInfo != NULL)
|
if (OrigInfo != NULL)
|
||||||
LsaFreeMemory(OrigInfo);
|
LsaFreeMemory(OrigInfo);
|
||||||
|
|
||||||
|
@ -412,5 +451,63 @@ done:
|
||||||
return Status;
|
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 */
|
/* EOF */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue