1133 DWORD ComputerNameSize;
1135 UCHAR LogonPassHash;
1138 TRACE(
"LsaApLogonUserEx2()\n");
1141 TRACE(
"ProtocolSubmitBuffer: %p\n", ProtocolSubmitBuffer);
1142 TRACE(
"SubmitBufferSize: %lu\n", SubmitBufferSize);
1145 *ProfileBufferSize = 0;
1147 *AccountName =
NULL;
1148 *AuthenticatingAuthority =
NULL;
1151 ComputerNameSize =
ARRAYSIZE(ComputerNameData);
1154 ERR(
"Failed to get Computername.\n");
1169 ERR(
"Invalid SubmitBufferSize %lu\n", SubmitBufferSize);
1182 #if 0 // FIXME: These checks happen to be done on Windows. We however keep them general on ReactOS for now... 1248 if (LogonPassHash > 0)
1254 ErasePassword = &LogonInfo->
Password;
1260 LogonUserName = &LogonInfo->
UserName;
1275 ProtocolSubmitBuffer,
1318 TRACE(
"NtAllocateLocallyUniqueId failed (Status %08lx)\n",
Status);
1326 TRACE(
"CreateLogonSession failed (Status %08lx)\n",
Status);
1330 SessionCreated =
TRUE;
1342 TRACE(
"BuildInteractiveProfileBuffer failed (Status %08lx)\n",
Status);
1361 TRACE(
"BuildTokenInformationBuffer failed (Status %08lx)\n",
Status);
1373 if ((UserHandle !=
NULL) &&
1394 if ((LogonUserName !=
NULL) &&
1395 (*AccountName !=
NULL))
1399 if ((*AccountName)->Buffer !=
NULL)
1401 (*AccountName)->MaximumLength = LogonUserName->
Length +
1409 if ((LogonDomain !=
NULL) &&
1410 (*AuthenticatingAuthority !=
NULL))
1414 if ((*AuthenticatingAuthority)->Buffer !=
NULL)
1416 (*AuthenticatingAuthority)->MaximumLength = LogonDomain->
Length +
1427 if ((*MachineName)->Buffer !=
NULL)
1430 (*MachineName)->Length = ComputerName.
Length;
1440 if (SessionCreated !=
FALSE)
1451 if (UserHandle !=
NULL)
#define STATUS_WRONG_PASSWORD
static NTSTATUS BuildTokenInformationBuffer(PLSA_TOKEN_INFORMATION_V1 *TokenInformation, PRPC_SID AccountDomainSid, PSAMPR_USER_INFO_BUFFER UserInfo, BOOL SpecialAccount)
VOID NTAPI RtlRunDecodeUnicodeString(IN UCHAR Hash, IN OUT PUNICODE_STRING String)
MSV1_0_LOGON_SUBMIT_TYPE MessageType
NTSTATUS SamValidateUser(_In_ SECURITY_LOGON_TYPE LogonType, _In_ PUNICODE_STRING LogonUserName, _In_ PUNICODE_STRING LogonDomain, _In_ PLSA_SAM_PWD_DATA LogonPwdData, _In_ PUNICODE_STRING ComputerName, _Out_ PBOOL SpecialAccount, _Out_ PRPC_SID *AccountDomainSidPtr, _Out_ SAMPR_HANDLE *UserHandlePtr, _Out_ PSAMPR_USER_INFO_BUFFER *UserInfoPtr, _Out_ PNTSTATUS SubStatus)
Validates a user by checking if it exists in the sam database. Some other checks are done further.
#define PtrOffset(BASE, OFFSET)
#define STATUS_INVALID_PARAMETER
PUNICODE_STRING ComputerName
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
NTSYSAPI VOID NTAPI RtlEraseUnicodeString(_Inout_ PUNICODE_STRING String)
_In_ DWORD _Out_ PDWORD _In_opt_ PCSTR MachineName
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
NTSTATUS NTAPI NtAllocateLocallyUniqueId(OUT LUID *LocallyUniqueId)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
static NTSTATUS LsaApLogonUserEx2_Network(_In_ PLSA_CLIENT_REQUEST ClientRequest, _In_ PVOID ProtocolSubmitBuffer, _In_ PVOID ClientBufferBase, _In_ ULONG SubmitBufferSize, _In_ PUNICODE_STRING ComputerName, _Out_ PUNICODE_STRING *LogonUserRef, _Out_ PUNICODE_STRING *LogonDomainRef, _Inout_ PLSA_SAM_PWD_DATA LogonPwdData, _Out_ SAMPR_HANDLE *UserHandlePtr, _Out_ PSAMPR_USER_INFO_BUFFER *UserInfoPtr, _Out_ PRPC_SID *AccountDomainSidPtr, _Out_ PBOOL SpecialAccount, _Out_ PMSV1_0_LM20_LOGON_PROFILE *LogonProfile, _Out_ PULONG LogonProfileSize, _Out_ PNTSTATUS SubStatus)
#define STATUS_INTERNAL_ERROR
return STATUS_NOT_IMPLEMENTED
struct _MSV1_0_INTERACTIVE_LOGON * PMSV1_0_INTERACTIVE_LOGON
#define FIXUP_POINTER(Pointer, Offset)
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID _Out_ PHANDLE _Out_ PQUOTA_LIMITS _Out_ PNTSTATUS SubStatus
static NTSTATUS BuildInteractiveProfileBuffer(IN PLSA_CLIENT_REQUEST ClientRequest, IN PSAMPR_USER_INFO_BUFFER UserInfo, IN PWSTR ComputerName, OUT PMSV1_0_INTERACTIVE_PROFILE *ProfileBuffer, OUT PULONG ProfileBufferLength)
NTSYSAPI NTSTATUS NTAPI RtlValidateUnicodeString(_In_ ULONG Flags, _In_ PCUNICODE_STRING String)
#define STATUS_NAME_TOO_LONG
#define STATUS_NO_SUCH_USER
#define NT_SUCCESS(StatCode)
#define USER_LOGON_SUCCESS
#define USER_LOGON_BAD_PASSWORD
#define STATUS_BAD_VALIDATION_CLASS
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID * ProfileBuffer
VOID NTAPI SamIFree_SAMPR_USER_INFO_BUFFER(PSAMPR_USER_INFO_BUFFER Ptr, USER_INFORMATION_CLASS InformationClass)
#define MAX_COMPUTERNAME_LENGTH
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE LogonType
NTSTATUS NTAPI SamrSetInformationUser(IN SAMPR_HANDLE UserHandle, IN USER_INFORMATION_CLASS UserInformationClass, IN PSAMPR_USER_INFO_BUFFER Buffer)
NTSTATUS __stdcall SamrCloseHandle(SAMPR_HANDLE *SamHandle)
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID LogonId
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
SAMPR_USER_INTERNAL2_INFORMATION Internal2
#define RtlCopyMemory(Destination, Source, Length)
_In_ PWDFDEVICE_INIT _In_ PWDF_PDO_EVENT_CALLBACKS DispatchTable
#define STATUS_LOGON_FAILURE
UNICODE_STRING LogonDomainName