ULONG RequestBufferSize;
ULONG ResponseBufferSize = 0;
LPWSTR Ptr;
+ LSA_STRING PackageName;
+ HANDLE LsaHandle = NULL;
+ ULONG AuthenticationPackage = 0;
BOOL res = FALSE;
NTSTATUS ProtocolStatus;
NTSTATUS Status;
NewPassword1,
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))
+ {
+ ERR("LsaLookupAuthenticationPackage failed (Status 0x%08lx)\n", Status);
+ goto done;
+ }
+
/* Call the authentication package */
- Status = LsaCallAuthenticationPackage(pgContext->LsaHandle,
- pgContext->AuthenticationPackage,
+ Status = LsaCallAuthenticationPackage(LsaHandle,
+ AuthenticationPackage,
RequestBuffer,
RequestBufferSize,
(PVOID*)&ResponseBuffer,
if (ResponseBuffer != NULL)
LsaFreeReturnBuffer(ResponseBuffer);
+ if (LsaHandle != NULL)
+ NtClose(LsaHandle);
+
return res;
}
}
-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;