diff --git a/reactos/include/ddk/setypes.h b/reactos/include/ddk/setypes.h index 591b1730994..322b7bdc46e 100644 --- a/reactos/include/ddk/setypes.h +++ b/reactos/include/ddk/setypes.h @@ -143,12 +143,12 @@ typedef struct _SECURITY_SUBJECT_CONTEXT typedef struct _SECURITY_CLIENT_CONTEXT { - SECURITY_QUALITY_OF_SERVICE SecurityQos; /* 0x00 */ - PACCESS_TOKEN Token; /* 0x0C */ - BOOLEAN DirectlyAccessClientToken; /* 0x10 */ - BOOLEAN DirectAccessEffectiveOnly; /* 0x11 */ - BOOLEAN ServerIsRemote; /* 0x12 */ - TOKEN_CONTROL ClientTokenControl; /* 0x14 */ + SECURITY_QUALITY_OF_SERVICE SecurityQos; + PACCESS_TOKEN ClientToken; + BOOLEAN DirectlyAccessClientToken; + BOOLEAN DirectAccessEffectiveOnly; + BOOLEAN ServerIsRemote; + TOKEN_CONTROL ClientTokenControl; } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT; diff --git a/reactos/ntoskrnl/include/internal/ps.h b/reactos/ntoskrnl/include/internal/ps.h index 924061e8596..caab4b45d44 100644 --- a/reactos/ntoskrnl/include/internal/ps.h +++ b/reactos/ntoskrnl/include/internal/ps.h @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: ps.h,v 1.77 2004/12/05 15:42:41 weiden Exp $ +/* $Id$ * * FILE: ntoskrnl/ke/kthread.c * PURPOSE: Process manager definitions @@ -147,10 +147,10 @@ typedef struct _KTHREAD #ifndef __USE_W32API typedef struct { - PACCESS_TOKEN Token; - BOOLEAN CopyOnOpen; - BOOLEAN EffectiveOnly; - SECURITY_IMPERSONATION_LEVEL Level; + PACCESS_TOKEN Token; + BOOLEAN CopyOnOpen; + BOOLEAN EffectiveOnly; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; } PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION; #endif diff --git a/reactos/ntoskrnl/ps/create.c b/reactos/ntoskrnl/ps/create.c index 2495702ea8a..0197e2e09c7 100644 --- a/reactos/ntoskrnl/ps/create.c +++ b/reactos/ntoskrnl/ps/create.c @@ -134,7 +134,7 @@ PsImpersonateClient (IN PETHREAD Thread, sizeof(PS_IMPERSONATION_INFORMATION)); } - Thread->ImpersonationInfo->Level = ImpersonationLevel; + Thread->ImpersonationInfo->ImpersonationLevel = ImpersonationLevel; Thread->ImpersonationInfo->CopyOnOpen = CopyOnOpen; Thread->ImpersonationInfo->EffectiveOnly = EffectiveOnly; Thread->ImpersonationInfo->Token = Token; @@ -167,7 +167,7 @@ PsReferenceEffectiveToken(PETHREAD Thread, Token = Thread->ImpersonationInfo->Token; *TokenType = TokenImpersonation; *EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly; - *Level = Thread->ImpersonationInfo->Level; + *Level = Thread->ImpersonationInfo->ImpersonationLevel; } return(Token); } @@ -219,9 +219,9 @@ NtImpersonateThread(IN HANDLE ThreadHandle, SeImpersonateClient (&ClientContext, Thread); - if (ClientContext.Token != NULL) + if (ClientContext.ClientToken != NULL) { - ObDereferenceObject (ClientContext.Token); + ObDereferenceObject (ClientContext.ClientToken); } ObDereferenceObject (ThreadToImpersonate); @@ -244,7 +244,7 @@ PsReferenceImpersonationToken(IN PETHREAD Thread, return NULL; } - *ImpersonationLevel = Thread->ImpersonationInfo->Level; + *ImpersonationLevel = Thread->ImpersonationInfo->ImpersonationLevel; *CopyOnOpen = Thread->ImpersonationInfo->CopyOnOpen; *EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly; ObReferenceObjectByPointer (Thread->ImpersonationInfo->Token, @@ -255,8 +255,11 @@ PsReferenceImpersonationToken(IN PETHREAD Thread, return Thread->ImpersonationInfo->Token; } +#ifdef PsDereferencePrimaryToken +#undef PsDereferenceImpersonationToken +#endif /* - * @unimplemented + * @implemented */ VOID STDCALL @@ -264,11 +267,16 @@ PsDereferenceImpersonationToken( IN PACCESS_TOKEN ImpersonationToken ) { - UNIMPLEMENTED; + if (ImpersonationToken) { + ObDereferenceObject(ImpersonationToken); + } } +#ifdef PsDereferencePrimaryToken +#undef PsDereferencePrimaryToken +#endif /* - * @unimplemented + * @implemented */ VOID STDCALL @@ -276,7 +284,7 @@ PsDereferencePrimaryToken( IN PACCESS_TOKEN PrimaryToken ) { - UNIMPLEMENTED; + ObDereferenceObject(PrimaryToken); } /* @@ -305,7 +313,7 @@ PsDisableImpersonation( ImpersonationState->Token = Thread->ImpersonationInfo->Token; ImpersonationState->CopyOnOpen = Thread->ImpersonationInfo->CopyOnOpen; ImpersonationState->EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly; - ImpersonationState->Level = Thread->ImpersonationInfo->Level; + ImpersonationState->Level = Thread->ImpersonationInfo->ImpersonationLevel; /* FIXME */ /* ExfReleasePushLock(&Thread->ThreadLock); */ diff --git a/reactos/ntoskrnl/se/token.c b/reactos/ntoskrnl/se/token.c index 47996249ae4..71dc6da8138 100644 --- a/reactos/ntoskrnl/se/token.c +++ b/reactos/ntoskrnl/se/token.c @@ -317,7 +317,6 @@ SeCopyClientToken(PACCESS_TOKEN Token, { NTSTATUS Status; OBJECT_ATTRIBUTES ObjectAttributes; - PTOKEN TokenNew; InitializeObjectAttributes(&ObjectAttributes, NULL, @@ -332,7 +331,6 @@ SeCopyClientToken(PACCESS_TOKEN Token, PreviousMode, (PTOKEN*)&NewToken); - *NewToken = (PACCESS_TOKEN)TokenNew; return(Status); } @@ -423,7 +421,7 @@ SeCreateClientSecurity(IN struct _ETHREAD *Thread, ClientContext->SecurityQos.ContextTrackingMode = Qos->ContextTrackingMode; ClientContext->SecurityQos.EffectiveOnly = Qos->EffectiveOnly; ClientContext->ServerIsRemote = RemoteClient; - ClientContext->Token = NewToken; + ClientContext->ClientToken = NewToken; return(STATUS_SUCCESS); } @@ -511,7 +509,7 @@ SeImpersonateClient(IN PSECURITY_CLIENT_CONTEXT ClientContext, ServerThread = PsGetCurrentThread(); } PsImpersonateClient(ServerThread, - ClientContext->Token, + ClientContext->ClientToken, 1, (ULONG)b, ClientContext->SecurityQos.ImpersonationLevel);