[LSASRV] Move the LSA_RPC_SERVER_ACTIVE event creation to a better place, in LsarStartRpcServer().

This commit is contained in:
Hermès Bélusca-Maïto 2018-06-26 22:19:40 +02:00
parent 0208a4d196
commit c901c3d37f
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
4 changed files with 44 additions and 37 deletions

View file

@ -182,7 +182,6 @@ LsapInitSids(VOID)
hInstance = GetModuleHandleW(L"lsasrv.dll");
/* NT Authority */
LsapLoadString(hInstance, IDS_NT_AUTHORITY, szAccountName, ARRAYSIZE(szAccountName));
LsapLoadString(hInstance, IDS_NT_AUTHORITY, szDomainName, ARRAYSIZE(szDomainName));
LsapCreateSid(&NtAuthority,

View file

@ -36,10 +36,12 @@ LsapSecretMapping = {SECRET_READ,
/* FUNCTIONS ***************************************************************/
VOID
NTSTATUS
LsarStartRpcServer(VOID)
{
RPC_STATUS Status;
DWORD dwError;
HANDLE hEvent;
RtlInitializeCriticalSection(&PolicyHandleTableLock);
@ -52,7 +54,7 @@ LsarStartRpcServer(VOID)
if (Status != RPC_S_OK)
{
WARN("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
return;
return I_RpcMapWin32Status(Status);
}
Status = RpcServerRegisterIf(lsarpc_v0_0_s_ifspec,
@ -61,7 +63,7 @@ LsarStartRpcServer(VOID)
if (Status != RPC_S_OK)
{
WARN("RpcServerRegisterIf() failed (Status %lx)\n", Status);
return;
return I_RpcMapWin32Status(Status);
}
DsSetupInit();
@ -70,10 +72,42 @@ LsarStartRpcServer(VOID)
if (Status != RPC_S_OK)
{
WARN("RpcServerListen() failed (Status %lx)\n", Status);
return;
return I_RpcMapWin32Status(Status);
}
/* Notify the service manager */
TRACE("Creating notification event!\n");
hEvent = CreateEventW(NULL,
TRUE,
FALSE,
L"LSA_RPC_SERVER_ACTIVE");
if (hEvent == NULL)
{
dwError = GetLastError();
TRACE("Failed to create or open the notification event (Error %lu)\n", dwError);
#if 0
if (dwError == ERROR_ALREADY_EXISTS)
{
hEvent = OpenEventW(GENERIC_WRITE,
FALSE,
L"LSA_RPC_SERVER_ACTIVE");
if (hEvent == NULL)
{
ERR("Could not open the notification event (Error %lu)\n", GetLastError());
return STATUS_UNSUCCESSFUL;
}
}
#endif
return STATUS_UNSUCCESSFUL;
}
TRACE("Set notification event!\n");
SetEvent(hEvent);
/* NOTE: Do not close the event handle, as it must remain alive! */
TRACE("LsarStartRpcServer() done\n");
return STATUS_SUCCESS;
}

View file

@ -271,8 +271,6 @@ LsaIFree_LSAPR_TRANSLATED_SIDS(
NTSTATUS WINAPI
LsapInitLsa(VOID)
{
HANDLE hEvent;
DWORD dwError;
NTSTATUS Status;
TRACE("LsapInitLsa() called\n");
@ -302,7 +300,7 @@ LsapInitLsa(VOID)
return Status;
}
/* Start the authentication port thread */
/* Start the authentication LPC port thread */
Status = StartAuthenticationPort();
if (!NT_SUCCESS(Status))
{
@ -311,37 +309,13 @@ LsapInitLsa(VOID)
}
/* Start the RPC server */
LsarStartRpcServer();
TRACE("Creating notification event!\n");
/* Notify the service manager */
hEvent = CreateEventW(NULL,
TRUE,
FALSE,
L"LSA_RPC_SERVER_ACTIVE");
if (hEvent == NULL)
Status = LsarStartRpcServer();
if (!NT_SUCCESS(Status))
{
dwError = GetLastError();
TRACE("Failed to create the notification event (Error %lu)\n", dwError);
if (dwError == ERROR_ALREADY_EXISTS)
{
hEvent = OpenEventW(GENERIC_WRITE,
FALSE,
L"LSA_RPC_SERVER_ACTIVE");
if (hEvent == NULL)
{
ERR("Could not open the notification event (Error %lu)\n", GetLastError());
return STATUS_UNSUCCESSFUL;
}
}
ERR("LsarStartRpcServer() failed (Status 0x%08lx)\n", Status);
return Status;
}
TRACE("Set notification event!\n");
SetEvent(hEvent);
/* NOTE: Do not close the event handle!!!! */
return STATUS_SUCCESS;
}

View file

@ -206,7 +206,7 @@ LsapLookupSids(PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
DWORD ClientRevision);
/* lsarpc.c */
VOID
NTSTATUS
LsarStartRpcServer(VOID);
/* policy.c */