mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
[lsasrv] Do not launch a thread to listen for incoming calls, but do it directly
Better LsarClose stub, which tries to do the right thing Fix a few prototypes See issue #4689 for more details. svn path=/trunk/; revision=42495
This commit is contained in:
parent
ac25f23e18
commit
2a10e77d03
2 changed files with 170 additions and 85 deletions
|
@ -6,7 +6,6 @@
|
||||||
#define NTOS_MODE_USER
|
#define NTOS_MODE_USER
|
||||||
#include <ndk/ntndk.h>
|
#include <ndk/ntndk.h>
|
||||||
|
|
||||||
#include "lsasrv.h"
|
|
||||||
#include "lsa_s.h"
|
#include "lsa_s.h"
|
||||||
|
|
||||||
#include <wine/debug.h>
|
#include <wine/debug.h>
|
||||||
|
@ -26,10 +25,11 @@ WINE_DEFAULT_DEBUG_CHANNEL(lsasrv);
|
||||||
|
|
||||||
/* FUNCTIONS ***************************************************************/
|
/* FUNCTIONS ***************************************************************/
|
||||||
|
|
||||||
/*static*/ NTSTATUS
|
static NTSTATUS
|
||||||
ReferencePolicyHandle(IN LSAPR_HANDLE ObjectHandle,
|
ReferencePolicyHandle(
|
||||||
IN ACCESS_MASK DesiredAccess,
|
IN LSA_HANDLE ObjectHandle,
|
||||||
OUT PLSAR_POLICY_HANDLE *Policy)
|
IN ACCESS_MASK DesiredAccess,
|
||||||
|
OUT PLSAR_POLICY_HANDLE *Policy)
|
||||||
{
|
{
|
||||||
PLSAR_POLICY_HANDLE ReferencedPolicy;
|
PLSAR_POLICY_HANDLE ReferencedPolicy;
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
@ -58,10 +58,10 @@ ReferencePolicyHandle(IN LSAPR_HANDLE ObjectHandle,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
/*static*/ VOID
|
DereferencePolicyHandle(
|
||||||
DereferencePolicyHandle(IN OUT PLSAR_POLICY_HANDLE Policy,
|
IN OUT PLSAR_POLICY_HANDLE Policy,
|
||||||
IN BOOLEAN Delete)
|
IN BOOLEAN Delete)
|
||||||
{
|
{
|
||||||
RtlEnterCriticalSection(&PolicyHandleTableLock);
|
RtlEnterCriticalSection(&PolicyHandleTableLock);
|
||||||
|
|
||||||
|
@ -83,13 +83,17 @@ DereferencePolicyHandle(IN OUT PLSAR_POLICY_HANDLE Policy,
|
||||||
RtlLeaveCriticalSection(&PolicyHandleTableLock);
|
RtlLeaveCriticalSection(&PolicyHandleTableLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
DWORD WINAPI
|
LsarStartRpcServer(VOID)
|
||||||
LsapRpcThreadRoutine(LPVOID lpParameter)
|
|
||||||
{
|
{
|
||||||
RPC_STATUS Status;
|
RPC_STATUS Status;
|
||||||
|
|
||||||
TRACE("LsapRpcThreadRoutine() called");
|
RtlInitializeCriticalSection(&PolicyHandleTableLock);
|
||||||
|
RtlInitializeHandleTable(0x1000,
|
||||||
|
sizeof(LSAR_POLICY_HANDLE),
|
||||||
|
&PolicyHandleTable);
|
||||||
|
|
||||||
|
TRACE("LsarStartRpcServer() called");
|
||||||
|
|
||||||
Status = RpcServerUseProtseqEpW(L"ncacn_np",
|
Status = RpcServerUseProtseqEpW(L"ncacn_np",
|
||||||
10,
|
10,
|
||||||
|
@ -98,7 +102,7 @@ LsapRpcThreadRoutine(LPVOID lpParameter)
|
||||||
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 0;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = RpcServerRegisterIf(lsarpc_v0_0_s_ifspec,
|
Status = RpcServerRegisterIf(lsarpc_v0_0_s_ifspec,
|
||||||
|
@ -107,51 +111,17 @@ LsapRpcThreadRoutine(LPVOID lpParameter)
|
||||||
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 0;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = RpcServerListen(1, 20, FALSE);
|
Status = RpcServerListen(1, 20, TRUE);
|
||||||
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 0;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("LsapRpcThreadRoutine() done\n");
|
TRACE("LsarStartRpcServer() 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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -162,16 +132,24 @@ void __RPC_USER LSAPR_HANDLE_rundown(LSAPR_HANDLE hHandle)
|
||||||
|
|
||||||
|
|
||||||
/* Function 0 */
|
/* Function 0 */
|
||||||
NTSTATUS
|
NTSTATUS LsarClose(
|
||||||
LsarClose(LSAPR_HANDLE *ObjectHandle)
|
LSAPR_HANDLE *ObjectHandle)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
PLSAR_POLICY_HANDLE Policy = NULL;
|
PLSAR_POLICY_HANDLE Policy = NULL;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
TRACE("0x%p\n", ObjectHandle);
|
TRACE("0x%p\n", ObjectHandle);
|
||||||
|
|
||||||
Status = ReferencePolicyHandle(*ObjectHandle,
|
#if 1
|
||||||
|
/* This is our fake handle, don't go too much long way */
|
||||||
|
if (*ObjectHandle == (LSA_HANDLE)0xcafe)
|
||||||
|
{
|
||||||
|
*ObjectHandle = NULL;
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Status = ReferencePolicyHandle((LSA_HANDLE)*ObjectHandle,
|
||||||
0,
|
0,
|
||||||
&Policy);
|
&Policy);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
|
@ -181,29 +159,13 @@ LsarClose(LSAPR_HANDLE *ObjectHandle)
|
||||||
TRUE);
|
TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
|
||||||
#endif
|
|
||||||
NTSTATUS Status = STATUS_NOT_IMPLEMENTED;
|
|
||||||
|
|
||||||
TRACE("LsarClose called!\n");
|
|
||||||
|
|
||||||
/* This is our fake handle, don't go too much long way */
|
|
||||||
if (*ObjectHandle == (LSA_HANDLE)0xcafe)
|
|
||||||
{
|
|
||||||
*ObjectHandle = NULL;
|
|
||||||
Status = STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TRACE("LsarClose done (Status: 0x%08lx)!\n", Status);
|
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Function 1 */
|
/* Function 1 */
|
||||||
NTSTATUS
|
NTSTATUS LsarDelete(
|
||||||
LsarDelete(LSAPR_HANDLE ObjectHandle)
|
LSAPR_HANDLE ObjectHandle)
|
||||||
{
|
{
|
||||||
/* Deprecated */
|
/* Deprecated */
|
||||||
return STATUS_NOT_SUPPORTED;
|
return STATUS_NOT_SUPPORTED;
|
||||||
|
@ -246,7 +208,7 @@ NTSTATUS LsarSetSecurityObject(
|
||||||
|
|
||||||
/* Function 5 */
|
/* Function 5 */
|
||||||
NTSTATUS LsarChangePassword(
|
NTSTATUS LsarChangePassword(
|
||||||
handle_t hBinding, /* FIXME */
|
handle_t IDL_handle,
|
||||||
PRPC_UNICODE_STRING String1,
|
PRPC_UNICODE_STRING String1,
|
||||||
PRPC_UNICODE_STRING String2,
|
PRPC_UNICODE_STRING String2,
|
||||||
PRPC_UNICODE_STRING String3,
|
PRPC_UNICODE_STRING String3,
|
||||||
|
@ -265,6 +227,7 @@ NTSTATUS LsarOpenPolicy(
|
||||||
ACCESS_MASK DesiredAccess,
|
ACCESS_MASK DesiredAccess,
|
||||||
LSAPR_HANDLE *PolicyHandle)
|
LSAPR_HANDLE *PolicyHandle)
|
||||||
{
|
{
|
||||||
|
#if 1
|
||||||
TRACE("LsarOpenPolicy called!\n");
|
TRACE("LsarOpenPolicy called!\n");
|
||||||
|
|
||||||
*PolicyHandle = (LSAPR_HANDLE)0xcafe;
|
*PolicyHandle = (LSAPR_HANDLE)0xcafe;
|
||||||
|
@ -272,6 +235,10 @@ NTSTATUS LsarOpenPolicy(
|
||||||
TRACE("LsarOpenPolicy done!\n");
|
TRACE("LsarOpenPolicy done!\n");
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
#else
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -572,7 +539,11 @@ NTSTATUS LsarLookupPrivilegeName(
|
||||||
|
|
||||||
/* Function 33 */
|
/* Function 33 */
|
||||||
NTSTATUS LsarLookupPrivilegeDisplayName(
|
NTSTATUS LsarLookupPrivilegeDisplayName(
|
||||||
LSAPR_HANDLE PolicyHandle, /* FIXME */
|
LSAPR_HANDLE PolicyHandle,
|
||||||
|
PRPC_UNICODE_STRING Name,
|
||||||
|
USHORT ClientLanguage,
|
||||||
|
USHORT ClientSystemDefaultLanguage,
|
||||||
|
PRPC_UNICODE_STRING *DisplayName,
|
||||||
USHORT *LanguageReturned)
|
USHORT *LanguageReturned)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
|
@ -1044,7 +1015,7 @@ NTSTATUS CredrRename(
|
||||||
|
|
||||||
/* Function 76 */
|
/* Function 76 */
|
||||||
NTSTATUS LsarLookupSids3(
|
NTSTATUS LsarLookupSids3(
|
||||||
handle_t hBinding,
|
LSAPR_HANDLE PolicyHandle,
|
||||||
PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
|
PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
|
||||||
PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
|
PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
|
||||||
PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
|
PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
|
||||||
|
@ -1060,7 +1031,6 @@ NTSTATUS LsarLookupSids3(
|
||||||
|
|
||||||
/* Function 77 */
|
/* Function 77 */
|
||||||
NTSTATUS LsarLookupNames4(
|
NTSTATUS LsarLookupNames4(
|
||||||
handle_t hBinding,
|
|
||||||
handle_t RpcHandle,
|
handle_t RpcHandle,
|
||||||
DWORD Count,
|
DWORD Count,
|
||||||
PRPC_UNICODE_STRING Names,
|
PRPC_UNICODE_STRING Names,
|
||||||
|
@ -1111,4 +1081,121 @@ NTSTATUS LsarAdtReportSecurityEvent(
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 82 */
|
||||||
|
NTSTATUS CredrFindBestCredential(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 83 */
|
||||||
|
NTSTATUS LsarSetAuditPolicy(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 84 */
|
||||||
|
NTSTATUS LsarQueryAuditPolicy(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 85 */
|
||||||
|
NTSTATUS LsarEnumerateAuditPolicy(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 86 */
|
||||||
|
NTSTATUS LsarEnumerateAuditCategories(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 87 */
|
||||||
|
NTSTATUS LsarEnumerateAuditSubCategories(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 88 */
|
||||||
|
NTSTATUS LsarLookupAuditCategoryName(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 89 */
|
||||||
|
NTSTATUS LsarLookupAuditSubCategoryName(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 90 */
|
||||||
|
NTSTATUS LsarSetAuditSecurity(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 91 */
|
||||||
|
NTSTATUS LsarQueryAuditSecurity(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 92 */
|
||||||
|
NTSTATUS CredReadByTokenHandle(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 93 */
|
||||||
|
NTSTATUS CredrRestoreCredentials(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Function 94 */
|
||||||
|
NTSTATUS CredrBackupCredentials(
|
||||||
|
handle_t hBinding)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -622,7 +622,6 @@ interface lsarpc
|
||||||
|
|
||||||
/* Function 5 */
|
/* Function 5 */
|
||||||
NTSTATUS LsarChangePassword(
|
NTSTATUS LsarChangePassword(
|
||||||
[in] handle_t hBinding, /* FIXME */
|
|
||||||
[in] PRPC_UNICODE_STRING String1,
|
[in] PRPC_UNICODE_STRING String1,
|
||||||
[in] PRPC_UNICODE_STRING String2,
|
[in] PRPC_UNICODE_STRING String2,
|
||||||
[in] PRPC_UNICODE_STRING String3,
|
[in] PRPC_UNICODE_STRING String3,
|
||||||
|
@ -805,11 +804,11 @@ interface lsarpc
|
||||||
|
|
||||||
/* Function 33 */
|
/* Function 33 */
|
||||||
NTSTATUS LsarLookupPrivilegeDisplayName(
|
NTSTATUS LsarLookupPrivilegeDisplayName(
|
||||||
[in] LSAPR_HANDLE PolicyHandle, /* FIXME */
|
[in] LSAPR_HANDLE PolicyHandle,
|
||||||
/*[in] PRPC_UNICODE_STRING Name,
|
[in] PRPC_UNICODE_STRING Name,
|
||||||
[in] USHORT ClientLanguage,
|
[in] USHORT ClientLanguage,
|
||||||
[in] USHORT ClientSystemDefaultLanguage,
|
[in] USHORT ClientSystemDefaultLanguage,
|
||||||
[out] PRPC_UNICODE_STRING *DisplayName,*/
|
[out] PRPC_UNICODE_STRING *DisplayName,
|
||||||
[out] USHORT *LanguageReturned);
|
[out] USHORT *LanguageReturned);
|
||||||
|
|
||||||
/* Function 34 */
|
/* Function 34 */
|
||||||
|
@ -1078,7 +1077,7 @@ cpp_quote("#if _WIN32_WINNT >= 0x0501")
|
||||||
|
|
||||||
/* Function 76 */
|
/* Function 76 */
|
||||||
NTSTATUS LsarLookupSids3(
|
NTSTATUS LsarLookupSids3(
|
||||||
[in] handle_t hBinding, /* FIXME */
|
[in] LSAPR_HANDLE PolicyHandle,
|
||||||
[in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
|
[in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
|
||||||
[out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
|
[out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
|
||||||
[in, out] PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
|
[in, out] PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
|
||||||
|
@ -1089,8 +1088,7 @@ cpp_quote("#if _WIN32_WINNT >= 0x0501")
|
||||||
|
|
||||||
/* Function 77 */
|
/* Function 77 */
|
||||||
NTSTATUS LsarLookupNames4(
|
NTSTATUS LsarLookupNames4(
|
||||||
[in] handle_t hBinding, /* FIXME */
|
[in] LSAPR_HANDLE PolicyHandle,
|
||||||
[in] handle_t RpcHandle,
|
|
||||||
[in] DWORD Count,
|
[in] DWORD Count,
|
||||||
[in, size_is(Count)] PRPC_UNICODE_STRING Names,
|
[in, size_is(Count)] PRPC_UNICODE_STRING Names,
|
||||||
[out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
|
[out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
|
||||||
|
|
Loading…
Reference in a new issue