From cc89c1b5b32f2702c772a31aea609d820d8ac4e6 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 10 Oct 2010 11:31:51 +0000 Subject: [PATCH] [NTOSKRNL] Implement SeImpersonateClientEx() and simplify SeImpersonateClient(). svn path=/trunk/; revision=49091 --- reactos/ntoskrnl/se/access.c | 50 +++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/reactos/ntoskrnl/se/access.c b/reactos/ntoskrnl/se/access.c index fdf4f1376b3..b4ebe9f9bbd 100644 --- a/reactos/ntoskrnl/se/access.c +++ b/reactos/ntoskrnl/se/access.c @@ -331,15 +331,36 @@ SeCreateClientSecurityFromSubjectContext(IN PSECURITY_SUBJECT_CONTEXT SubjectCon } /* - * @unimplemented + * @implemented */ NTSTATUS NTAPI SeImpersonateClientEx(IN PSECURITY_CLIENT_CONTEXT ClientContext, IN PETHREAD ServerThread OPTIONAL) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + BOOLEAN EffectiveOnly; + + PAGED_CODE(); + + if (ClientContext->DirectlyAccessClientToken == FALSE) + { + EffectiveOnly = ClientContext->SecurityQos.EffectiveOnly; + } + else + { + EffectiveOnly = ClientContext->DirectAccessEffectiveOnly; + } + + if (ServerThread == NULL) + { + ServerThread = PsGetCurrentThread(); + } + + return PsImpersonateClient(ServerThread, + ClientContext->ClientToken, + TRUE, + EffectiveOnly, + ClientContext->SecurityQos.ImpersonationLevel); } /* @@ -350,29 +371,10 @@ NTAPI SeImpersonateClient(IN PSECURITY_CLIENT_CONTEXT ClientContext, IN PETHREAD ServerThread OPTIONAL) { - UCHAR b; - PAGED_CODE(); - if (ClientContext->DirectlyAccessClientToken == FALSE) - { - b = ClientContext->SecurityQos.EffectiveOnly; - } - else - { - b = ClientContext->DirectAccessEffectiveOnly; - } - - if (ServerThread == NULL) - { - ServerThread = PsGetCurrentThread(); - } - - PsImpersonateClient(ServerThread, - ClientContext->ClientToken, - 1, - b, - ClientContext->SecurityQos.ImpersonationLevel); + SeImpersonateClientEx(ClientContext, + ServerThread); } /* EOF */