[MSGINA]
authorEric Kohl <eric.kohl@reactos.org>
Sun, 2 Feb 2014 12:12:59 +0000 (12:12 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sun, 2 Feb 2014 12:12:59 +0000 (12:12 +0000)
Move the LSA connection code into a separate file. This connection code will later be used by the logon code too.

svn path=/trunk/; revision=61919

reactos/dll/win32/msgina/CMakeLists.txt
reactos/dll/win32/msgina/gui.c
reactos/dll/win32/msgina/lsa.c [new file with mode: 0644]
reactos/dll/win32/msgina/msgina.h

index b7594a4..9ac77fa 100644 (file)
@@ -7,6 +7,7 @@ spec2def(msgina.dll msgina.spec)
 
 list(APPEND SOURCE
     gui.c
+    lsa.c
     msgina.c
     stubs.c
     tui.c
index 06c5894..4031557 100644 (file)
@@ -259,9 +259,6 @@ DoChangePassword(
     ULONG RequestBufferSize;
     ULONG ResponseBufferSize = 0;
     LPWSTR Ptr;
-    LSA_STRING PackageName;
-    HANDLE LsaHandle = NULL;
-    ULONG AuthenticationPackage = 0;
     BOOL res = FALSE;
     NTSTATUS ProtocolStatus;
     NTSTATUS Status;
@@ -349,29 +346,15 @@ DoChangePassword(
                   RequestBuffer->NewPassword.MaximumLength);
 
     /* Connect to the LSA server */
-    Status = LsaConnectUntrusted(&LsaHandle);
-    if (!NT_SUCCESS(Status))
-    {
-        ERR("LsaConnectUntrusted failed (Status 0x%08lx)\n", Status);
-        goto done;
-    }
-
-    /* Get the authentication package */
-    RtlInitAnsiString((PANSI_STRING)&PackageName,
-                      MSV1_0_PACKAGE_NAME);
-
-    Status = LsaLookupAuthenticationPackage(LsaHandle,
-                                            &PackageName,
-                                            &AuthenticationPackage);
-    if (!NT_SUCCESS(Status))
+    if (!ConnectToLsa(pgContext))
     {
-        ERR("LsaLookupAuthenticationPackage failed (Status 0x%08lx)\n", Status);
-        goto done;
+        ERR("ConnectToLsa() failed\n");
+        return FALSE;
     }
 
     /* Call the authentication package */
-    Status = LsaCallAuthenticationPackage(LsaHandle,
-                                          AuthenticationPackage,
+    Status = LsaCallAuthenticationPackage(pgContext->LsaHandle,
+                                          pgContext->AuthenticationPackage,
                                           RequestBuffer,
                                           RequestBufferSize,
                                           (PVOID*)&ResponseBuffer,
@@ -404,9 +387,6 @@ done:
     if (ResponseBuffer != NULL)
         LsaFreeReturnBuffer(ResponseBuffer);
 
-    if (LsaHandle != NULL)
-        NtClose(LsaHandle);
-
     return res;
 }
 
diff --git a/reactos/dll/win32/msgina/lsa.c b/reactos/dll/win32/msgina/lsa.c
new file mode 100644 (file)
index 0000000..354f7f0
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * PROJECT:         ReactOS msgina.dll
+ * FILE:            dll/win32/msgina/gui.c
+ * PURPOSE:         ReactOS Logon GINA DLL
+ * PROGRAMMER:      Eric Kohl
+ */
+
+#include "msgina.h"
+
+BOOL
+ConnectToLsa(
+    PGINA_CONTEXT pgContext)
+{
+    LSA_STRING LogonProcessName;
+    LSA_STRING PackageName;
+    LSA_OPERATIONAL_MODE SecurityMode = 0;
+    NTSTATUS Status;
+
+    /* We are already connected to the LSA */
+    if (pgContext->LsaHandle != NULL)
+        return TRUE;
+
+    /* 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;
+}
+
+/* EOF */
index 48d3f36..a9c62a4 100644 (file)
@@ -38,6 +38,8 @@ typedef struct
     PWLX_DISPATCH_VERSION_1_3 pWlxFuncs;
     HANDLE hDllInstance;
     HWND hStatusWindow;
+    HANDLE LsaHandle;
+    ULONG AuthenticationPackage;
     DWORD AutoLogonState;
     BOOL bDisableCAD;
     BOOL bAutoAdminLogon;
@@ -82,6 +84,12 @@ typedef struct _GINA_UI
     PFGINA_DISPLAYLOCKEDNOTICE DisplayLockedNotice;
 } GINA_UI, *PGINA_UI;
 
+/* lsa.c */
+
+BOOL
+ConnectToLsa(
+    PGINA_CONTEXT pgContext);
+
 /* msgina.c */
 
 BOOL