MyLogonUser: Pass the sub status to the caller.
svn path=/trunk/; revision=62369
#include "msgina.h"
-BOOL
+NTSTATUS
ConnectToLsa(
PGINA_CONTEXT pgContext)
{
/* We are already connected to the LSA */
if (pgContext->LsaHandle != NULL)
- return TRUE;
+ return STATUS_SUCCESS;
/* Connect to the LSA server */
RtlInitAnsiString((PANSI_STRING)&LogonProcessName,
if (!NT_SUCCESS(Status))
{
ERR("LsaRegisterLogonProcess failed (Status 0x%08lx)\n", Status);
- return FALSE;
+ return Status;
}
/* Get the authentication package */
if (!NT_SUCCESS(Status))
{
ERR("LsaLookupAuthenticationPackage failed (Status 0x%08lx)\n", Status);
- return FALSE;
}
- return TRUE;
+ return Status;
}
-BOOL
+NTSTATUS
MyLogonUser(
HANDLE LsaHandle,
ULONG AuthenticationPackage,
LPWSTR lpszUsername,
LPWSTR lpszDomain,
LPWSTR lpszPassword,
- PHANDLE phToken)
+ PHANDLE phToken,
+ PNTSTATUS SubStatus)
{
SID_IDENTIFIER_AUTHORITY LocalAuthority = {SECURITY_LOCAL_SID_AUTHORITY};
SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY};
LUID LogonId = {0, 0};
HANDLE TokenHandle = NULL;
QUOTA_LIMITS QuotaLimits;
- NTSTATUS SubStatus = STATUS_SUCCESS;
NTSTATUS Status;
*phToken = NULL;
&Luid,
&TokenHandle,
&QuotaLimits,
- &SubStatus);
+ SubStatus);
if (!NT_SUCCESS(Status))
{
ERR("LsaLogonUser failed (Status 0x%08lx)\n", Status);
if (AuthInfo != NULL)
RtlFreeHeap(RtlGetProcessHeap(), 0, AuthInfo);
- if (!NT_SUCCESS(Status))
- {
- SetLastError(RtlNtStatusToDosError(Status));
- return FALSE;
- }
-
- return TRUE;
+ return Status;
}
/* EOF */
ULONG Size;
ULONG i;
NTSTATUS Status;
+ NTSTATUS SubStatus = STATUS_SUCCESS;
TRACE("(%S %S %S)\n", UserName, Domain, Password);
- if (!ConnectToLsa(pgContext))
+ Status = ConnectToLsa(pgContext);
+ if (!NT_SUCCESS(Status))
+ {
+ WARN("ConnectToLsa() failed\n");
return FALSE;
+ }
- if (!MyLogonUser(pgContext->LsaHandle,
- pgContext->AuthenticationPackage,
- UserName,
- Domain,
- Password,
- &pgContext->UserToken))
+ 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 (!ConnectToLsa(pgContext))
+ Status = ConnectToLsa(pgContext);
+ if (!NT_SUCCESS(Status))
+ {
+ WARN("ConnectToLsa() failed\n");
return FALSE;
+ }
- if (!MyLogonUser(pgContext->LsaHandle,
- pgContext->AuthenticationPackage,
- UserName,
- Domain,
- Password,
- &pgContext->UserToken))
+ 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;
}
/* lsa.c */
-BOOL
+NTSTATUS
ConnectToLsa(
PGINA_CONTEXT pgContext);
-BOOL
+NTSTATUS
MyLogonUser(
HANDLE LsaHandle,
ULONG AuthenticationPackage,
LPWSTR lpszUsername,
LPWSTR lpszDomain,
LPWSTR lpszPassword,
- PHANDLE phToken);
+ PHANDLE phToken,
+ PNTSTATUS SubStatus);
/* msgina.c */
HANDLE hToken;
WCHAR UserName[256];
WCHAR Password[256];
+ NTSTATUS SubStatus;
+ NTSTATUS Status;
TRACE("TUILockedSAS()\n");
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
return WLX_SAS_ACTION_NONE;
- if (!ConnectToLsa(pgContext))
+ Status = ConnectToLsa(pgContext);
+ if (!NT_SUCCESS(Status))
+ {
+ WARN("ConnectToLsa() failed\n");
return WLX_SAS_ACTION_NONE;
+ }
- if (!MyLogonUser(pgContext->LsaHandle,
- pgContext->AuthenticationPackage,
- UserName,
- NULL,
- Password,
- &hToken))
+ Status = MyLogonUser(pgContext->LsaHandle,
+ pgContext->AuthenticationPackage,
+ UserName,
+ NULL,
+ Password,
+ &hToken,
+ &SubStatus);
+ if (!NT_SUCCESS(Status))
{
- WARN("LogonUserW() failed\n");
+ WARN("MyLogonUser() failed\n");
return WLX_SAS_ACTION_NONE;
}