Fix more wrong structure defintions that don't match official ones, plus fix little bug I introduced.

svn path=/trunk/; revision=12744
This commit is contained in:
Alex Ionescu 2005-01-03 01:13:10 +00:00
parent 8c1121a5be
commit 01efd62aff
4 changed files with 31 additions and 25 deletions

View file

@ -143,12 +143,12 @@ typedef struct _SECURITY_SUBJECT_CONTEXT
typedef struct _SECURITY_CLIENT_CONTEXT typedef struct _SECURITY_CLIENT_CONTEXT
{ {
SECURITY_QUALITY_OF_SERVICE SecurityQos; /* 0x00 */ SECURITY_QUALITY_OF_SERVICE SecurityQos;
PACCESS_TOKEN Token; /* 0x0C */ PACCESS_TOKEN ClientToken;
BOOLEAN DirectlyAccessClientToken; /* 0x10 */ BOOLEAN DirectlyAccessClientToken;
BOOLEAN DirectAccessEffectiveOnly; /* 0x11 */ BOOLEAN DirectAccessEffectiveOnly;
BOOLEAN ServerIsRemote; /* 0x12 */ BOOLEAN ServerIsRemote;
TOKEN_CONTROL ClientTokenControl; /* 0x14 */ TOKEN_CONTROL ClientTokenControl;
} SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT; } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 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 * FILE: ntoskrnl/ke/kthread.c
* PURPOSE: Process manager definitions * PURPOSE: Process manager definitions
@ -147,10 +147,10 @@ typedef struct _KTHREAD
#ifndef __USE_W32API #ifndef __USE_W32API
typedef struct typedef struct
{ {
PACCESS_TOKEN Token; PACCESS_TOKEN Token;
BOOLEAN CopyOnOpen; BOOLEAN CopyOnOpen;
BOOLEAN EffectiveOnly; BOOLEAN EffectiveOnly;
SECURITY_IMPERSONATION_LEVEL Level; SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
} PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION; } PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION;
#endif #endif

View file

@ -134,7 +134,7 @@ PsImpersonateClient (IN PETHREAD Thread,
sizeof(PS_IMPERSONATION_INFORMATION)); sizeof(PS_IMPERSONATION_INFORMATION));
} }
Thread->ImpersonationInfo->Level = ImpersonationLevel; Thread->ImpersonationInfo->ImpersonationLevel = ImpersonationLevel;
Thread->ImpersonationInfo->CopyOnOpen = CopyOnOpen; Thread->ImpersonationInfo->CopyOnOpen = CopyOnOpen;
Thread->ImpersonationInfo->EffectiveOnly = EffectiveOnly; Thread->ImpersonationInfo->EffectiveOnly = EffectiveOnly;
Thread->ImpersonationInfo->Token = Token; Thread->ImpersonationInfo->Token = Token;
@ -167,7 +167,7 @@ PsReferenceEffectiveToken(PETHREAD Thread,
Token = Thread->ImpersonationInfo->Token; Token = Thread->ImpersonationInfo->Token;
*TokenType = TokenImpersonation; *TokenType = TokenImpersonation;
*EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly; *EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly;
*Level = Thread->ImpersonationInfo->Level; *Level = Thread->ImpersonationInfo->ImpersonationLevel;
} }
return(Token); return(Token);
} }
@ -219,9 +219,9 @@ NtImpersonateThread(IN HANDLE ThreadHandle,
SeImpersonateClient (&ClientContext, SeImpersonateClient (&ClientContext,
Thread); Thread);
if (ClientContext.Token != NULL) if (ClientContext.ClientToken != NULL)
{ {
ObDereferenceObject (ClientContext.Token); ObDereferenceObject (ClientContext.ClientToken);
} }
ObDereferenceObject (ThreadToImpersonate); ObDereferenceObject (ThreadToImpersonate);
@ -244,7 +244,7 @@ PsReferenceImpersonationToken(IN PETHREAD Thread,
return NULL; return NULL;
} }
*ImpersonationLevel = Thread->ImpersonationInfo->Level; *ImpersonationLevel = Thread->ImpersonationInfo->ImpersonationLevel;
*CopyOnOpen = Thread->ImpersonationInfo->CopyOnOpen; *CopyOnOpen = Thread->ImpersonationInfo->CopyOnOpen;
*EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly; *EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly;
ObReferenceObjectByPointer (Thread->ImpersonationInfo->Token, ObReferenceObjectByPointer (Thread->ImpersonationInfo->Token,
@ -255,8 +255,11 @@ PsReferenceImpersonationToken(IN PETHREAD Thread,
return Thread->ImpersonationInfo->Token; return Thread->ImpersonationInfo->Token;
} }
#ifdef PsDereferencePrimaryToken
#undef PsDereferenceImpersonationToken
#endif
/* /*
* @unimplemented * @implemented
*/ */
VOID VOID
STDCALL STDCALL
@ -264,11 +267,16 @@ PsDereferenceImpersonationToken(
IN PACCESS_TOKEN ImpersonationToken IN PACCESS_TOKEN ImpersonationToken
) )
{ {
UNIMPLEMENTED; if (ImpersonationToken) {
ObDereferenceObject(ImpersonationToken);
}
} }
#ifdef PsDereferencePrimaryToken
#undef PsDereferencePrimaryToken
#endif
/* /*
* @unimplemented * @implemented
*/ */
VOID VOID
STDCALL STDCALL
@ -276,7 +284,7 @@ PsDereferencePrimaryToken(
IN PACCESS_TOKEN PrimaryToken IN PACCESS_TOKEN PrimaryToken
) )
{ {
UNIMPLEMENTED; ObDereferenceObject(PrimaryToken);
} }
/* /*
@ -305,7 +313,7 @@ PsDisableImpersonation(
ImpersonationState->Token = Thread->ImpersonationInfo->Token; ImpersonationState->Token = Thread->ImpersonationInfo->Token;
ImpersonationState->CopyOnOpen = Thread->ImpersonationInfo->CopyOnOpen; ImpersonationState->CopyOnOpen = Thread->ImpersonationInfo->CopyOnOpen;
ImpersonationState->EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly; ImpersonationState->EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly;
ImpersonationState->Level = Thread->ImpersonationInfo->Level; ImpersonationState->Level = Thread->ImpersonationInfo->ImpersonationLevel;
/* FIXME */ /* FIXME */
/* ExfReleasePushLock(&Thread->ThreadLock); */ /* ExfReleasePushLock(&Thread->ThreadLock); */

View file

@ -317,7 +317,6 @@ SeCopyClientToken(PACCESS_TOKEN Token,
{ {
NTSTATUS Status; NTSTATUS Status;
OBJECT_ATTRIBUTES ObjectAttributes; OBJECT_ATTRIBUTES ObjectAttributes;
PTOKEN TokenNew;
InitializeObjectAttributes(&ObjectAttributes, InitializeObjectAttributes(&ObjectAttributes,
NULL, NULL,
@ -332,7 +331,6 @@ SeCopyClientToken(PACCESS_TOKEN Token,
PreviousMode, PreviousMode,
(PTOKEN*)&NewToken); (PTOKEN*)&NewToken);
*NewToken = (PACCESS_TOKEN)TokenNew;
return(Status); return(Status);
} }
@ -423,7 +421,7 @@ SeCreateClientSecurity(IN struct _ETHREAD *Thread,
ClientContext->SecurityQos.ContextTrackingMode = Qos->ContextTrackingMode; ClientContext->SecurityQos.ContextTrackingMode = Qos->ContextTrackingMode;
ClientContext->SecurityQos.EffectiveOnly = Qos->EffectiveOnly; ClientContext->SecurityQos.EffectiveOnly = Qos->EffectiveOnly;
ClientContext->ServerIsRemote = RemoteClient; ClientContext->ServerIsRemote = RemoteClient;
ClientContext->Token = NewToken; ClientContext->ClientToken = NewToken;
return(STATUS_SUCCESS); return(STATUS_SUCCESS);
} }
@ -511,7 +509,7 @@ SeImpersonateClient(IN PSECURITY_CLIENT_CONTEXT ClientContext,
ServerThread = PsGetCurrentThread(); ServerThread = PsGetCurrentThread();
} }
PsImpersonateClient(ServerThread, PsImpersonateClient(ServerThread,
ClientContext->Token, ClientContext->ClientToken,
1, 1,
(ULONG)b, (ULONG)b,
ClientContext->SecurityQos.ImpersonationLevel); ClientContext->SecurityQos.ImpersonationLevel);