mirror of
https://github.com/reactos/reactos.git
synced 2025-04-22 05:00:27 +00:00
[ADVAPI32]
Do not deregister the logon process after logon. Close the port when the DLL is unloaded. svn path=/trunk/; revision=61285
This commit is contained in:
parent
a740935f27
commit
b1932aac4d
3 changed files with 90 additions and 40 deletions
|
@ -56,6 +56,11 @@
|
||||||
#define FN_PROGRESSA FN_PROGRESS
|
#define FN_PROGRESSA FN_PROGRESS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* logon.c */
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
CloseLogonLsaHandle(VOID);
|
||||||
|
|
||||||
/* rpc.c */
|
/* rpc.c */
|
||||||
|
|
||||||
RPC_STATUS EvtBindRpc(LPCWSTR pszMachine,
|
RPC_STATUS EvtBindRpc(LPCWSTR pszMachine,
|
||||||
|
|
|
@ -15,8 +15,10 @@ extern BOOL RegInitialize(VOID);
|
||||||
extern BOOL RegCleanup(VOID);
|
extern BOOL RegCleanup(VOID);
|
||||||
extern VOID UnloadNtMarta(VOID);
|
extern VOID UnloadNtMarta(VOID);
|
||||||
|
|
||||||
BOOL WINAPI
|
BOOL
|
||||||
DllMain(HINSTANCE hinstDll,
|
WINAPI
|
||||||
|
DllMain(
|
||||||
|
HINSTANCE hinstDll,
|
||||||
DWORD dwReason,
|
DWORD dwReason,
|
||||||
LPVOID reserved)
|
LPVOID reserved)
|
||||||
{
|
{
|
||||||
|
@ -26,7 +28,9 @@ DllMain(HINSTANCE hinstDll,
|
||||||
DisableThreadLibraryCalls(hinstDll);
|
DisableThreadLibraryCalls(hinstDll);
|
||||||
RegInitialize();
|
RegInitialize();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
|
CloseLogonLsaHandle();
|
||||||
RegCleanup();
|
RegCleanup();
|
||||||
UnloadNtMarta();
|
UnloadNtMarta();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -9,8 +9,83 @@
|
||||||
#include <advapi32.h>
|
#include <advapi32.h>
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(advapi);
|
WINE_DEFAULT_DEBUG_CHANNEL(advapi);
|
||||||
|
|
||||||
|
/* GLOBALS *****************************************************************/
|
||||||
|
|
||||||
|
HANDLE LsaHandle = NULL;
|
||||||
|
ULONG AuthenticationPackage = 0;
|
||||||
|
|
||||||
/* FUNCTIONS ***************************************************************/
|
/* FUNCTIONS ***************************************************************/
|
||||||
|
|
||||||
|
static
|
||||||
|
NTSTATUS
|
||||||
|
OpenLogonLsaHandle(VOID)
|
||||||
|
{
|
||||||
|
LSA_STRING LogonProcessName;
|
||||||
|
LSA_STRING PackageName;
|
||||||
|
LSA_OPERATIONAL_MODE SecurityMode = 0;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
RtlInitAnsiString((PANSI_STRING)&LogonProcessName,
|
||||||
|
"User32LogonProcess");
|
||||||
|
|
||||||
|
Status = LsaRegisterLogonProcess(&LogonProcessName,
|
||||||
|
&LsaHandle,
|
||||||
|
&SecurityMode);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("LsaRegisterLogonProcess failed (Status 0x%08lx)\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
RtlInitAnsiString((PANSI_STRING)&PackageName,
|
||||||
|
MSV1_0_PACKAGE_NAME);
|
||||||
|
|
||||||
|
Status = LsaLookupAuthenticationPackage(LsaHandle,
|
||||||
|
&PackageName,
|
||||||
|
&AuthenticationPackage);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("LsaLookupAuthenticationPackage failed (Status 0x%08lx)\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRACE("AuthenticationPackage: 0x%08lx\n", AuthenticationPackage);
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
if (LsaHandle != NULL)
|
||||||
|
{
|
||||||
|
Status = LsaDeregisterLogonProcess(LsaHandle);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("LsaDeregisterLogonProcess failed (Status 0x%08lx)\n", Status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
CloseLogonLsaHandle(VOID)
|
||||||
|
{
|
||||||
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
|
||||||
|
if (LsaHandle != NULL)
|
||||||
|
{
|
||||||
|
Status = LsaDeregisterLogonProcess(LsaHandle);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("LsaDeregisterLogonProcess failed (Status 0x%08lx)\n", Status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -224,11 +299,6 @@ LogonUserW(LPWSTR lpszUsername,
|
||||||
{
|
{
|
||||||
SID_IDENTIFIER_AUTHORITY LocalAuthority = {SECURITY_LOCAL_SID_AUTHORITY};
|
SID_IDENTIFIER_AUTHORITY LocalAuthority = {SECURITY_LOCAL_SID_AUTHORITY};
|
||||||
SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY};
|
SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY};
|
||||||
LSA_STRING LogonProcessName;
|
|
||||||
LSA_STRING PackageName;
|
|
||||||
HANDLE LsaHandle = NULL;
|
|
||||||
LSA_OPERATIONAL_MODE SecurityMode = 0;
|
|
||||||
ULONG AuthenticationPackage = 0;
|
|
||||||
PSID LogonSid = NULL;
|
PSID LogonSid = NULL;
|
||||||
PSID LocalSid = NULL;
|
PSID LocalSid = NULL;
|
||||||
LSA_STRING OriginName;
|
LSA_STRING OriginName;
|
||||||
|
@ -251,33 +321,13 @@ LogonUserW(LPWSTR lpszUsername,
|
||||||
|
|
||||||
*phToken = NULL;
|
*phToken = NULL;
|
||||||
|
|
||||||
RtlInitAnsiString((PANSI_STRING)&LogonProcessName,
|
if (LsaHandle == NULL)
|
||||||
"User32LogonProcess");
|
|
||||||
|
|
||||||
Status = LsaRegisterLogonProcess(&LogonProcessName,
|
|
||||||
&LsaHandle,
|
|
||||||
&SecurityMode);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
{
|
||||||
TRACE("LsaRegisterLogonProcess failed (Status 0x%08lx)\n", Status);
|
Status = OpenLogonLsaHandle();
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
RtlInitAnsiString((PANSI_STRING)&PackageName,
|
|
||||||
MSV1_0_PACKAGE_NAME);
|
|
||||||
|
|
||||||
Status = LsaLookupAuthenticationPackage(LsaHandle,
|
|
||||||
&PackageName,
|
|
||||||
&AuthenticationPackage);
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
return Status;
|
||||||
TRACE("LsaLookupAuthenticationPackage failed (Status 0x%08lx)\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("AuthenticationPackage: 0x%08lx\n", AuthenticationPackage);
|
|
||||||
|
|
||||||
|
|
||||||
RtlInitAnsiString((PANSI_STRING)&OriginName,
|
RtlInitAnsiString((PANSI_STRING)&OriginName,
|
||||||
"Testapp");
|
"Testapp");
|
||||||
|
|
||||||
|
@ -454,15 +504,6 @@ done:
|
||||||
if (AuthInfo != NULL)
|
if (AuthInfo != NULL)
|
||||||
RtlFreeHeap(RtlGetProcessHeap(), 0, AuthInfo);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, AuthInfo);
|
||||||
|
|
||||||
if (LsaHandle != NULL)
|
|
||||||
{
|
|
||||||
Status = LsaDeregisterLogonProcess(LsaHandle);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("LsaDeregisterLogonProcess failed (Status 0x%08lx)\n", Status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
SetLastError(RtlNtStatusToDosError(Status));
|
SetLastError(RtlNtStatusToDosError(Status));
|
||||||
|
|
Loading…
Reference in a new issue