diff --git a/reactos/base/system/services/rpcserver.c b/reactos/base/system/services/rpcserver.c index ef82f0b0834..5555357f181 100644 --- a/reactos/base/system/services/rpcserver.c +++ b/reactos/base/system/services/rpcserver.c @@ -1511,6 +1511,9 @@ ScmrOpenSCManagerW(handle_t BindingHandle, if (ScmShutdown) return ERROR_SHUTDOWN_IN_PROGRESS; + if (!ScmWaitForEvent()) + return ERROR_ACCESS_DENIED; + dwError = ScmCreateManagerHandle(lpDatabaseName, &hHandle); if (dwError != ERROR_SUCCESS) diff --git a/reactos/base/system/services/services.c b/reactos/base/system/services/services.c index 60ad9fd45a1..8d07f4741ac 100644 --- a/reactos/base/system/services/services.c +++ b/reactos/base/system/services/services.c @@ -94,6 +94,27 @@ ScmCreateStartEvent(PHANDLE StartEvent) } +BOOL ScmWaitForEvent() +{ + HANDLE hEvent; + + hEvent = OpenEvent(EVENT_ALL_ACCESS, + FALSE, + TEXT("SvcctrlStartEvent_A3752DX")); + + if (hEvent) + { + DWORD ret = WaitForSingleObject(hEvent, + INFINITE); + + if (ret == WAIT_OBJECT_0) + return TRUE; + } + + return FALSE; +} + + BOOL ScmNamedPipeHandleRequest(PVOID Request, DWORD RequestSize, diff --git a/reactos/base/system/services/services.h b/reactos/base/system/services/services.h index f823a7816aa..52f531cd765 100644 --- a/reactos/base/system/services/services.h +++ b/reactos/base/system/services/services.h @@ -134,6 +134,7 @@ VOID ScmStartRpcServer(VOID); /* services.c */ +BOOL ScmWaitForEvent(); VOID PrintString(LPCSTR fmt, ...); /* EOF */