#include "msgina.h"
+#include <winreg.h>
+#include <winsvc.h>
+#include <userenv.h>
+#include <ndk/sefuncs.h>
+
HINSTANCE hDllInstance;
extern GINA_UI GinaGraphicalUI;
dwSize = 256 * sizeof(WCHAR);
rc = RegQueryValueExW(hKey,
- L"DefaultDomainName",
+ L"DefaultDomain",
NULL,
NULL,
(LPBYTE)&pgContext->Domain,
}
-static
-BOOL
-ConnectToLsa(
- PGINA_CONTEXT pgContext)
-{
- LSA_STRING LogonProcessName;
- LSA_STRING PackageName;
- LSA_OPERATIONAL_MODE SecurityMode = 0;
- NTSTATUS Status;
-
- /* Connect to the LSA server */
- RtlInitAnsiString((PANSI_STRING)&LogonProcessName,
- "MSGINA");
-
- Status = LsaRegisterLogonProcess(&LogonProcessName,
- &pgContext->LsaHandle,
- &SecurityMode);
- if (!NT_SUCCESS(Status))
- {
- ERR("LsaRegisterLogonProcess failed (Status 0x%08lx)\n", Status);
- return FALSE;
- }
-
- /* Get the authentication package */
- RtlInitAnsiString((PANSI_STRING)&PackageName,
- MSV1_0_PACKAGE_NAME);
-
- Status = LsaLookupAuthenticationPackage(pgContext->LsaHandle,
- &PackageName,
- &pgContext->AuthenticationPackage);
- if (!NT_SUCCESS(Status))
- {
- ERR("LsaLookupAuthenticationPackage failed (Status 0x%08lx)\n", Status);
- return FALSE;
- }
-
- return TRUE;
-}
-
-
/*
* @implemented
*/
return FALSE;
}
- if (!ConnectToLsa(pgContext))
- {
- WARN("ConnectToLsa() failed\n");
- LocalFree(pgContext);
- return FALSE;
- }
-
/* Return the context to winlogon */
*pWlxContext = (PVOID)pgContext;
pgContext->hDllInstance = hDllInstance;
/* Check autologon settings the first time */
pgContext->AutoLogonState = AUTOLOGON_CHECK_REGISTRY;
+ pgContext->nShutdownAction = WLX_SAS_ACTION_SHUTDOWN_POWER_OFF;
+
ChooseGinaUI();
return pGinaUI->Initialize(pgContext);
}
BOOL
DoAdminUnlock(
+ IN PGINA_CONTEXT pgContext,
IN PWSTR UserName,
IN PWSTR Domain,
IN PWSTR Password)
ULONG Size;
ULONG i;
NTSTATUS Status;
+ NTSTATUS SubStatus = STATUS_SUCCESS;
TRACE("(%S %S %S)\n", UserName, Domain, Password);
- if (!LogonUserW(UserName,
- Domain,
- Password,
- LOGON32_LOGON_INTERACTIVE,
- LOGON32_PROVIDER_DEFAULT,
- &hToken))
+ Status = ConnectToLsa(pgContext);
+ if (!NT_SUCCESS(Status))
+ {
+ WARN("ConnectToLsa() failed\n");
+ return FALSE;
+ }
+
+ Status = MyLogonUser(pgContext->LsaHandle,
+ pgContext->AuthenticationPackage,
+ UserName,
+ Domain,
+ Password,
+ &pgContext->UserToken,
+ &SubStatus);
+ if (!NT_SUCCESS(Status))
{
- WARN("LogonUserW() failed\n");
+ WARN("MyLogonUser() failed\n");
return FALSE;
}
DWORD cbStats, cbSize;
DWORD dwLength;
BOOL bResult;
+ NTSTATUS SubStatus;
+ NTSTATUS Status;
- if (!LogonUserW(UserName, Domain, Password,
- LOGON32_LOGON_INTERACTIVE,
- LOGON32_PROVIDER_DEFAULT,
- &pgContext->UserToken))
+ Status = ConnectToLsa(pgContext);
+ if (!NT_SUCCESS(Status))
+ {
+ WARN("ConnectToLsa() failed\n");
+ return FALSE;
+ }
+
+ Status = MyLogonUser(pgContext->LsaHandle,
+ pgContext->AuthenticationPackage,
+ UserName,
+ Domain,
+ Password,
+ &pgContext->UserToken,
+ &SubStatus);
+ if (!NT_SUCCESS(Status))
{
- WARN("LogonUserW() failed\n");
+ WARN("MyLogonUser() failed\n");
goto cleanup;
}
LPWSTR AutoCount = NULL;
LPWSTR IgnoreShiftOverride = NULL;
LPWSTR UserName = NULL;
- LPWSTR DomainName = NULL;
+ LPWSTR Domain = NULL;
LPWSTR Password = NULL;
BOOL result = FALSE;
LONG rc;
rc = ReadRegSzKey(WinLogonKey, L"DefaultUserName", &UserName);
if (rc != ERROR_SUCCESS)
goto cleanup;
- rc = ReadRegSzKey(WinLogonKey, L"DefaultDomainName", &DomainName);
+ rc = ReadRegSzKey(WinLogonKey, L"DefaultDomain", &Domain);
if (rc != ERROR_SUCCESS && rc != ERROR_FILE_NOT_FOUND)
goto cleanup;
rc = ReadRegSzKey(WinLogonKey, L"DefaultPassword", &Password);
if (rc != ERROR_SUCCESS)
goto cleanup;
- result = DoLoginTasks(pgContext, UserName, DomainName, Password);
+ result = DoLoginTasks(pgContext, UserName, Domain, Password);
if (result == TRUE)
{
- pgContext->Password = HeapAlloc(GetProcessHeap(),
- HEAP_ZERO_MEMORY,
- (wcslen(Password) + 1) * sizeof(WCHAR));
- if (pgContext->Password != NULL)
- wcscpy(pgContext->Password, Password);
+ ZeroMemory(pgContext->Password, 256 * sizeof(WCHAR));
+ wcscpy(pgContext->Password, Password);
NotifyBootConfigStatus(TRUE);
}
HeapFree(GetProcessHeap(), 0, AutoCount);
HeapFree(GetProcessHeap(), 0, IgnoreShiftOverride);
HeapFree(GetProcessHeap(), 0, UserName);
- HeapFree(GetProcessHeap(), 0, DomainName);
+ HeapFree(GetProcessHeap(), 0, Domain);
HeapFree(GetProcessHeap(), 0, Password);
TRACE("DoAutoLogon(): AutoLogonState = %lu, returning %d\n",
pgContext->AutoLogonState, result);