mirror of
https://github.com/reactos/reactos.git
synced 2025-04-30 11:08:51 +00:00
- Start the RPC-Server from a separate thread so the initial call to the DLL doesn't get blocked.
- Ensure the server accepts more than a single call from clients. svn path=/trunk/; revision=37599
This commit is contained in:
parent
4abc5d743f
commit
991af663db
1 changed files with 54 additions and 15 deletions
|
@ -57,6 +57,7 @@ ReferencePolicyHandle(IN LSAPR_HANDLE ObjectHandle,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*static*/ VOID
|
/*static*/ VOID
|
||||||
DereferencePolicyHandle(IN OUT PLSAR_POLICY_HANDLE Policy,
|
DereferencePolicyHandle(IN OUT PLSAR_POLICY_HANDLE Policy,
|
||||||
IN BOOLEAN Delete)
|
IN BOOLEAN Delete)
|
||||||
|
@ -81,17 +82,13 @@ DereferencePolicyHandle(IN OUT PLSAR_POLICY_HANDLE Policy,
|
||||||
RtlLeaveCriticalSection(&PolicyHandleTableLock);
|
RtlLeaveCriticalSection(&PolicyHandleTableLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
|
||||||
LsarStartRpcServer(VOID)
|
DWORD STDCALL
|
||||||
|
LsapRpcThreadRoutine(LPVOID lpParameter)
|
||||||
{
|
{
|
||||||
RPC_STATUS Status;
|
RPC_STATUS Status;
|
||||||
|
|
||||||
RtlInitializeCriticalSection(&PolicyHandleTableLock);
|
TRACE("LsapRpcThreadRoutine() called");
|
||||||
RtlInitializeHandleTable(0x1000,
|
|
||||||
sizeof(LSAR_POLICY_HANDLE),
|
|
||||||
&PolicyHandleTable);
|
|
||||||
|
|
||||||
TRACE("LsarStartRpcServer() called");
|
|
||||||
|
|
||||||
Status = RpcServerUseProtseqEpW(L"ncacn_np",
|
Status = RpcServerUseProtseqEpW(L"ncacn_np",
|
||||||
10,
|
10,
|
||||||
|
@ -100,7 +97,7 @@ LsarStartRpcServer(VOID)
|
||||||
if (Status != RPC_S_OK)
|
if (Status != RPC_S_OK)
|
||||||
{
|
{
|
||||||
WARN("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
|
WARN("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = RpcServerRegisterIf(lsarpc_v0_0_s_ifspec,
|
Status = RpcServerRegisterIf(lsarpc_v0_0_s_ifspec,
|
||||||
|
@ -109,17 +106,51 @@ LsarStartRpcServer(VOID)
|
||||||
if (Status != RPC_S_OK)
|
if (Status != RPC_S_OK)
|
||||||
{
|
{
|
||||||
WARN("RpcServerRegisterIf() failed (Status %lx)\n", Status);
|
WARN("RpcServerRegisterIf() failed (Status %lx)\n", Status);
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = RpcServerListen(1, 20, TRUE);
|
Status = RpcServerListen(1, 20, FALSE);
|
||||||
if (Status != RPC_S_OK)
|
if (Status != RPC_S_OK)
|
||||||
{
|
{
|
||||||
WARN("RpcServerListen() failed (Status %lx)\n", Status);
|
WARN("RpcServerListen() failed (Status %lx)\n", Status);
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("LsarStartRpcServer() done\n");
|
TRACE("LsapRpcThreadRoutine() done\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
LsarStartRpcServer(VOID)
|
||||||
|
{
|
||||||
|
HANDLE hThread;
|
||||||
|
|
||||||
|
TRACE("LsarStartRpcServer() called");
|
||||||
|
|
||||||
|
RtlInitializeCriticalSection(&PolicyHandleTableLock);
|
||||||
|
RtlInitializeHandleTable(0x1000,
|
||||||
|
sizeof(LSAR_POLICY_HANDLE),
|
||||||
|
&PolicyHandleTable);
|
||||||
|
|
||||||
|
hThread = CreateThread(NULL,
|
||||||
|
0,
|
||||||
|
(LPTHREAD_START_ROUTINE)
|
||||||
|
LsapRpcThreadRoutine,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
NULL);
|
||||||
|
if (!hThread)
|
||||||
|
{
|
||||||
|
WARN("Starting LsapRpcThreadRoutine-Thread failed!\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CloseHandle(hThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
TRACE("LsarStartRpcServer() done");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -220,8 +251,16 @@ NTSTATUS LsarOpenPolicy(
|
||||||
ACCESS_MASK DesiredAccess,
|
ACCESS_MASK DesiredAccess,
|
||||||
LSAPR_HANDLE *PolicyHandle)
|
LSAPR_HANDLE *PolicyHandle)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
ERR("LsarOpenPolicy called!\n");
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
|
||||||
|
*PolicyHandle = (LSAPR_HANDLE)0xcafe;
|
||||||
|
|
||||||
|
ERR("LsarOpenPolicy done!\n");
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
|
||||||
|
// UNIMPLEMENTED;
|
||||||
|
// return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue