diff --git a/dll/win32/lsasrv/lookup.c b/dll/win32/lsasrv/lookup.c index b0805ebc0f8..79cbffca57c 100644 --- a/dll/win32/lsasrv/lookup.c +++ b/dll/win32/lsasrv/lookup.c @@ -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, diff --git a/dll/win32/lsasrv/lsarpc.c b/dll/win32/lsasrv/lsarpc.c index 4b9ef392c27..5f314e8c2be 100644 --- a/dll/win32/lsasrv/lsarpc.c +++ b/dll/win32/lsasrv/lsarpc.c @@ -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; } diff --git a/dll/win32/lsasrv/lsasrv.c b/dll/win32/lsasrv/lsasrv.c index 12fac372d82..e2a28bd600b 100644 --- a/dll/win32/lsasrv/lsasrv.c +++ b/dll/win32/lsasrv/lsasrv.c @@ -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; } diff --git a/dll/win32/lsasrv/lsasrv.h b/dll/win32/lsasrv/lsasrv.h index 4bc0673c717..8a772aba212 100644 --- a/dll/win32/lsasrv/lsasrv.h +++ b/dll/win32/lsasrv/lsasrv.h @@ -206,7 +206,7 @@ LsapLookupSids(PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, DWORD ClientRevision); /* lsarpc.c */ -VOID +NTSTATUS LsarStartRpcServer(VOID); /* policy.c */