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
{
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;

View file

@ -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

View file

@ -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); */

View file

@ -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);