From cc8ac23992240358f0846acd235c63bf0ddd4300 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 10 Jan 2016 10:27:46 +0000 Subject: [PATCH] [ADVAPI32] Implement LsaOpenPolicySce. [LSASRV] Update the LsarOpenPolicySce prototype. svn path=/trunk/; revision=70566 --- reactos/dll/win32/advapi32/sec/lsa.c | 30 +++++++++++++++++++++++++--- reactos/dll/win32/lsasrv/lsarpc.c | 5 ++++- reactos/dll/win32/lsasrv/lsasrv.spec | 2 +- reactos/include/reactos/idl/lsa.idl | 5 ++++- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/reactos/dll/win32/advapi32/sec/lsa.c b/reactos/dll/win32/advapi32/sec/lsa.c index da480b10e8a..1984f0c0ce8 100644 --- a/reactos/dll/win32/advapi32/sec/lsa.c +++ b/reactos/dll/win32/advapi32/sec/lsa.c @@ -1164,7 +1164,7 @@ LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL, /* - * @unimplemented + * @implemented */ NTSTATUS WINAPI @@ -1173,10 +1173,34 @@ LsaOpenPolicySce(IN PLSA_UNICODE_STRING SystemName OPTIONAL, IN ACCESS_MASK DesiredAccess, OUT PLSA_HANDLE PolicyHandle) { - FIXME("LsaOpenPolicySce(%s %p 0x%08lx %p)\n", + NTSTATUS Status; + + TRACE("LsaOpenPolicySce(%s %p 0x%08lx %p)\n", SystemName ? debugstr_w(SystemName->Buffer) : "(null)", ObjectAttributes, DesiredAccess, PolicyHandle); - return STATUS_NOT_IMPLEMENTED; + + /* FIXME: RPC should take care of this */ + if (!LsapIsLocalComputer(SystemName)) + return RPC_NT_SERVER_UNAVAILABLE; + + RpcTryExcept + { + *PolicyHandle = NULL; + + Status = LsarOpenPolicySce(SystemName ? SystemName->Buffer : NULL, + (PLSAPR_OBJECT_ATTRIBUTES)ObjectAttributes, + DesiredAccess, + PolicyHandle); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + Status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + TRACE("LsaOpenPolicySce() done (Status: 0x%08lx)\n", Status); + + return Status; } diff --git a/reactos/dll/win32/lsasrv/lsarpc.c b/reactos/dll/win32/lsasrv/lsarpc.c index 7d90797d9c7..0df15ce8f15 100644 --- a/reactos/dll/win32/lsasrv/lsarpc.c +++ b/reactos/dll/win32/lsasrv/lsarpc.c @@ -3153,7 +3153,10 @@ NTSTATUS WINAPI LsarLookupNames4( /* Function 78 */ NTSTATUS WINAPI LsarOpenPolicySce( - handle_t hBinding) + LPWSTR SystemName, + PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *PolicyHandle) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; diff --git a/reactos/dll/win32/lsasrv/lsasrv.spec b/reactos/dll/win32/lsasrv/lsasrv.spec index db1d185ac47..3ae494aea9b 100644 --- a/reactos/dll/win32/lsasrv/lsasrv.spec +++ b/reactos/dll/win32/lsasrv/lsasrv.spec @@ -51,7 +51,7 @@ @ stdcall LsarLookupSids2(ptr ptr ptr ptr long long long long) @ stdcall LsarOpenAccount(ptr ptr long ptr) @ stdcall LsarOpenPolicy(ptr ptr long ptr) - @ stdcall LsarOpenPolicySce(ptr) + @ stdcall LsarOpenPolicySce(ptr ptr long ptr) @ stdcall LsarOpenSecret(ptr ptr long ptr) @ stdcall LsarOpenTrustedDomain(ptr ptr long ptr) @ stdcall LsarOpenTrustedDomainByName(ptr ptr long ptr) diff --git a/reactos/include/reactos/idl/lsa.idl b/reactos/include/reactos/idl/lsa.idl index 7a33d751a4d..c96a49ad897 100644 --- a/reactos/include/reactos/idl/lsa.idl +++ b/reactos/include/reactos/idl/lsa.idl @@ -1091,7 +1091,10 @@ cpp_quote("#if _WIN32_WINNT >= 0x0501") /* Function 78 */ NTSTATUS __stdcall LsarOpenPolicySce( - [in] handle_t hBinding); /* FIXME */ + [in, unique] PLSAPR_SERVER_NAME SystemName, + [in] PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *PolicyHandle); /* Function 79 */ NTSTATUS __stdcall LsarAdtRegisterSecurityEventSource(