diff --git a/reactos/include/lsass/lsass.h b/reactos/include/lsass/lsass.h index c04597aafe4..c4369aa46a2 100644 --- a/reactos/include/lsass/lsass.h +++ b/reactos/include/lsass/lsass.h @@ -95,20 +95,23 @@ typedef struct _LSASS_REGISTER_LOGON_PROCESS_REPLY LSA_OPERATIONAL_MODE OperationalMode; } LSASS_REGISTER_LOGON_PROCESS_REPLY, *PLSASS_REGISTER_LOGON_PROCESS_REPLY; -typedef struct _LSASS_REQUEST +typedef union _LSASS_REQUEST { LPC_MESSAGE Header; - ULONG Type; - union - { - LSASS_REGISTER_LOGON_PROCESS_REQUEST RegisterLogonProcessRequest; - LSASS_LOGON_USER_REQUEST LogonUserRequest; - LSASS_CALL_AUTHENTICATION_PACKAGE_REQUEST - CallAuthenticationPackageRequest; - LSASS_DEREGISTER_LOGON_PROCESS_REPLY DeregisterLogonProcessRequest; - LSASS_LOOKUP_AUTHENTICATION_PACKAGE_REQUEST - LookupAuthenticationPackageRequest; - } d; + struct { + UCHAR LpcHeader[LPC_MESSAGE_BASE_SIZE]; + ULONG Type; + union + { + LSASS_REGISTER_LOGON_PROCESS_REQUEST RegisterLogonProcessRequest; + LSASS_LOGON_USER_REQUEST LogonUserRequest; + LSASS_CALL_AUTHENTICATION_PACKAGE_REQUEST + CallAuthenticationPackageRequest; + LSASS_DEREGISTER_LOGON_PROCESS_REPLY DeregisterLogonProcessRequest; + LSASS_LOOKUP_AUTHENTICATION_PACKAGE_REQUEST + LookupAuthenticationPackageRequest; + } d; + }; } LSASS_REQUEST, *PLSASS_REQUEST; typedef struct _LSASS_REPLY diff --git a/reactos/lib/secur32/lsa.c b/reactos/lib/secur32/lsa.c index 95db9e185c6..cb4439aaa4b 100644 --- a/reactos/lib/secur32/lsa.c +++ b/reactos/lib/secur32/lsa.c @@ -11,9 +11,9 @@ /* INCLUDES ******************************************************************/ #include -#include -#include +#include #include +#include #include /* GLOBALS *******************************************************************/ @@ -83,9 +83,9 @@ LsaCallAuthenticationPackage(HANDLE LsaHandle, Reply = (PLSASS_REPLY)RawReply; Request->Header.DataSize = sizeof(LSASS_REQUEST) + SubmitBufferLength - - sizeof(LPC_MESSAGE); + LPC_MESSAGE_BASE_SIZE; Request->Header.MessageSize = - Request->Header.DataSize + sizeof(LPC_MESSAGE); + Request->Header.DataSize + LPC_MESSAGE_BASE_SIZE; Request->Type = LSASS_REQUEST_CALL_AUTHENTICATION_PACKAGE; Request->d.CallAuthenticationPackageRequest.AuthenticationPackage = AuthenticationPackage; @@ -146,9 +146,9 @@ LsaLookupAuthenticationPackage(HANDLE LsaHandle, Request = (PLSASS_REQUEST)RawRequest; Request->Header.DataSize = sizeof(LSASS_REQUEST) + PackageName->Length - - sizeof(LPC_MESSAGE); + LPC_MESSAGE_BASE_SIZE; Request->Header.MessageSize = Request->Header.DataSize + - sizeof(LPC_MESSAGE); + LPC_MESSAGE_BASE_SIZE; Request->Type = LSASS_REQUEST_LOOKUP_AUTHENTICATION_PACKAGE; Status = NtRequestWaitReplyPort(LsaHandle, @@ -196,7 +196,7 @@ LsaLogonUser(HANDLE LsaHandle, UCHAR RawReply[MAX_MESSAGE_DATA]; NTSTATUS Status; - RequestLength = sizeof(LSASS_REQUEST) - sizeof(LPC_MESSAGE); + RequestLength = sizeof(LSASS_REQUEST) - LPC_MESSAGE_BASE_SIZE; RequestLength = RequestLength + (OriginName->Length * sizeof(WCHAR)); RequestLength = RequestLength + AuthenticationInformationLength; RequestLength = RequestLength + @@ -236,8 +236,8 @@ LsaLogonUser(HANDLE LsaHandle, Request->d.LogonUserRequest.SourceContext = *SourceContext; Request->Type = LSASS_REQUEST_LOGON_USER; - Request->Header.DataSize = RequestLength - sizeof(LPC_MESSAGE); - Request->Header.MessageSize = RequestLength + sizeof(LPC_MESSAGE); + Request->Header.DataSize = RequestLength - LPC_MESSAGE_BASE_SIZE; + Request->Header.MessageSize = RequestLength + LPC_MESSAGE_BASE_SIZE; Reply = (PLSASS_REPLY)RawReply; @@ -303,12 +303,13 @@ LsaRegisterLogonProcess(PLSA_STRING LsaLogonProcessName, Request.Type = LSASS_REQUEST_REGISTER_LOGON_PROCESS; Request.Header.DataSize = sizeof(LSASS_REQUEST) - - sizeof(LPC_MESSAGE); + LPC_MESSAGE_BASE_SIZE; Request.Header.MessageSize = sizeof(LSASS_REQUEST); Request.d.RegisterLogonProcessRequest.Length = LsaLogonProcessName->Length; - wcscpy(Request.d.RegisterLogonProcessRequest.LogonProcessNameBuffer, - LsaLogonProcessName->Buffer); + memcpy(Request.d.RegisterLogonProcessRequest.LogonProcessNameBuffer, + LsaLogonProcessName->Buffer, + Request.d.RegisterLogonProcessRequest.Length); Status = NtRequestWaitReplyPort(*Handle, &Request.Header, diff --git a/reactos/lib/secur32/secur32.xml b/reactos/lib/secur32/secur32.xml index 8fc720044f8..56d8f463847 100644 --- a/reactos/lib/secur32/secur32.xml +++ b/reactos/lib/secur32/secur32.xml @@ -2,6 +2,7 @@ . + ntdll kernel32 advapi32