Fix some prototypes.

svn path=/trunk/; revision=8722
This commit is contained in:
Eric Kohl 2004-03-14 18:13:19 +00:00
parent e040902fff
commit 2ce08a79bb
5 changed files with 169 additions and 142 deletions

View file

@ -1,18 +1,21 @@
/* $Id: psfuncs.h,v 1.27 2003/10/04 18:19:17 navaraf Exp $
/* $Id: psfuncs.h,v 1.28 2004/03/14 18:10:41 ekohl Exp $
*/
#ifndef _INCLUDE_DDK_PSFUNCS_H
#define _INCLUDE_DDK_PSFUNCS_H
NTSTATUS STDCALL PsAssignImpersonationToken (struct _ETHREAD* Thread,
HANDLE TokenHandle);
NTSTATUS STDCALL
PsAssignImpersonationToken (IN struct _ETHREAD* Thread,
IN HANDLE TokenHandle);
/*
* Warning: Even though it returns HANDLE, it's not a real HANDLE but really a
* ULONG ProcessId! (Skywing)
*/
HANDLE STDCALL PsGetCurrentProcessId(VOID);
HANDLE STDCALL
PsGetCurrentProcessId (VOID);
HANDLE STDCALL PsGetCurrentThreadId(VOID);
HANDLE STDCALL
PsGetCurrentThreadId (VOID);
/*
* FUNCTION: Creates a thread which executes in kernel mode
@ -30,18 +33,22 @@ HANDLE STDCALL PsGetCurrentThreadId(VOID);
* execution
* RETURNS: Success or failure status
*/
NTSTATUS STDCALL PsCreateSystemThread(PHANDLE ThreadHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
HANDLE ProcessHandle,
PCLIENT_ID ClientId,
PKSTART_ROUTINE StartRoutine,
void *StartContext);
NTSTATUS STDCALL PsTerminateSystemThread(NTSTATUS ExitStatus);
NTSTATUS STDCALL
PsCreateSystemThread (PHANDLE ThreadHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
HANDLE ProcessHandle,
PCLIENT_ID ClientId,
PKSTART_ROUTINE StartRoutine,
void *StartContext);
NTSTATUS STDCALL PsCreateSystemProcess(PHANDLE ProcessHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes);
NTSTATUS STDCALL
PsTerminateSystemThread (NTSTATUS ExitStatus);
NTSTATUS STDCALL
PsCreateSystemProcess (PHANDLE ProcessHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes);
NTSTATUS STDCALL PsCreateWin32Process(struct _EPROCESS* Process);
NTSTATUS STDCALL PsCreateWin32Thread(struct _ETHREAD* Thread);
@ -57,21 +64,24 @@ PsEstablishWin32Callouts (PW32_PROCESS_CALLBACK W32ProcessCallback,
#define PsGetCurrentProcess() IoGetCurrentProcess()
#define PsGetCurrentThread() ((struct _ETHREAD*) (KeGetCurrentThread()))
PACCESS_TOKEN STDCALL PsReferenceImpersonationToken(struct _ETHREAD* Thread,
PULONG Unknown1,
PULONG Unknown2,
SECURITY_IMPERSONATION_LEVEL*
Level);
PACCESS_TOKEN STDCALL PsReferencePrimaryToken(struct _EPROCESS* Process);
NTSTATUS STDCALL PsAssignImpersonationToken(struct _ETHREAD* Thread,
HANDLE TokenHandle);
PACCESS_TOKEN STDCALL
PsReferenceImpersonationToken (IN struct _ETHREAD *Thread,
OUT PBOOLEAN CopyOnOpen,
OUT PBOOLEAN EffectiveOnly,
OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
VOID STDCALL PsImpersonateClient(struct _ETHREAD* Thread,
PACCESS_TOKEN Token,
UCHAR b,
UCHAR c,
SECURITY_IMPERSONATION_LEVEL Level);
VOID STDCALL PsRevertToSelf(VOID);
PACCESS_TOKEN STDCALL
PsReferencePrimaryToken (struct _EPROCESS* Process);
VOID STDCALL
PsImpersonateClient (IN struct _ETHREAD* Thread,
IN PACCESS_TOKEN Token,
IN BOOLEAN CopyOnOpen,
IN BOOLEAN EffectiveOnly,
IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
VOID STDCALL
PsRevertToSelf (VOID);
BOOLEAN STDCALL PsGetVersion (PULONG MajorVersion OPTIONAL,
PULONG MinorVersion OPTIONAL,

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.57 2004/01/05 14:28:20 weiden Exp $
/* $Id: ps.h,v 1.58 2004/03/14 18:11:25 ekohl Exp $
*
* FILE: ntoskrnl/ke/kthread.c
* PURPOSE: Process manager definitions
@ -163,11 +163,11 @@ typedef struct _KTHREAD
#include <poppack.h>
/* Top level irp definitions. */
#define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
#define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
#define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
#define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
#define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
#define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
#define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
#define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
#define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
#define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
typedef struct _TOP_LEVEL_IRP
{
@ -177,11 +177,11 @@ typedef struct _TOP_LEVEL_IRP
typedef struct
{
PACCESS_TOKEN Token; // 0x0
UCHAR Unknown1; // 0x4
UCHAR Unknown2; // 0x5
UCHAR Pad[2]; // 0x6
SECURITY_IMPERSONATION_LEVEL Level; // 0x8
PACCESS_TOKEN Token; // 0x0
BOOLEAN CopyOnOpen; // 0x4
BOOLEAN EffectiveOnly; // 0x5
UCHAR Pad[2]; // 0x6
SECURITY_IMPERSONATION_LEVEL Level; // 0x8
} PS_IMPERSONATION_INFO, *PPS_IMPERSONATION_INFO;
#include <pshpack1.h>
@ -226,7 +226,7 @@ typedef struct _ETHREAD
UCHAR LpcExitThreadCalled; /* 238/264 */
UCHAR HardErrorsAreDisabled; /* 239/265 */
UCHAR LpcReceivedMsgIdValid; /* 23A/266 */
UCHAR ActiveImpersonationInfo; /* 23B/267 */
BOOLEAN ActiveImpersonationInfo; /* 23B/267 */
ULONG PerformanceCountHigh; /* 23C/268 */
/*

View file

@ -114,7 +114,7 @@ VOID SepInitializeTokenImplementation(VOID);
NTSTATUS SepCreateSystemProcessToken(struct _EPROCESS* Process);
NTSTATUS SepInitializeNewProcess(struct _EPROCESS* NewProcess,
struct _EPROCESS* ParentProcess);
struct _EPROCESS* ParentProcess);
NTSTATUS SeExchangePrimaryToken(struct _EPROCESS* Process,
PACCESS_TOKEN NewToken,

View file

@ -1,4 +1,4 @@
/* $Id: create.c,v 1.70 2004/01/05 14:28:21 weiden Exp $
/* $Id: create.c,v 1.71 2004/03/14 18:12:07 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -91,88 +91,93 @@ PsAssignImpersonationToken(PETHREAD Thread,
return(STATUS_SUCCESS);
}
/*
* @implemented
*/
VOID STDCALL
PsRevertToSelf(VOID)
PsRevertToSelf (VOID)
{
PETHREAD Thread;
PETHREAD Thread;
Thread = PsGetCurrentThread();
Thread = PsGetCurrentThread ();
if (Thread->ActiveImpersonationInfo != 0)
{
ObDereferenceObject(Thread->ImpersonationInfo->Token);
Thread->ActiveImpersonationInfo = 0;
}
if (Thread->ActiveImpersonationInfo == TRUE)
{
ObDereferenceObject (Thread->ImpersonationInfo->Token);
Thread->ActiveImpersonationInfo = FALSE;
}
}
/*
* @implemented
*/
VOID STDCALL
PsImpersonateClient(PETHREAD Thread,
PACCESS_TOKEN Token,
UCHAR b,
UCHAR c,
SECURITY_IMPERSONATION_LEVEL Level)
PsImpersonateClient (IN PETHREAD Thread,
IN PACCESS_TOKEN Token,
IN BOOLEAN CopyOnOpen,
IN BOOLEAN EffectiveOnly,
IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
{
if (Token == 0)
{
if (Thread->ActiveImpersonationInfo != 0)
{
Thread->ActiveImpersonationInfo = 0;
if (Thread->ImpersonationInfo->Token != NULL)
{
ObDereferenceObject(Thread->ImpersonationInfo->Token);
}
}
return;
}
if (Thread->ActiveImpersonationInfo == 0 ||
Thread->ImpersonationInfo == NULL)
{
Thread->ImpersonationInfo = ExAllocatePool(NonPagedPool,
sizeof(PS_IMPERSONATION_INFO));
}
Thread->ImpersonationInfo->Level = Level;
Thread->ImpersonationInfo->Unknown2 = c;
Thread->ImpersonationInfo->Unknown1 = b;
Thread->ImpersonationInfo->Token = Token;
ObReferenceObjectByPointer(Token,
if (Token == NULL)
{
if (Thread->ActiveImpersonationInfo == TRUE)
{
Thread->ActiveImpersonationInfo = FALSE;
if (Thread->ImpersonationInfo->Token != NULL)
{
ObDereferenceObject (Thread->ImpersonationInfo->Token);
}
}
return;
}
if (Thread->ImpersonationInfo == NULL)
{
Thread->ImpersonationInfo = ExAllocatePool (NonPagedPool,
sizeof(PS_IMPERSONATION_INFO));
}
Thread->ImpersonationInfo->Level = ImpersonationLevel;
Thread->ImpersonationInfo->CopyOnOpen = CopyOnOpen;
Thread->ImpersonationInfo->EffectiveOnly = EffectiveOnly;
Thread->ImpersonationInfo->Token = Token;
ObReferenceObjectByPointer (Token,
0,
SepTokenObjectType,
KernelMode);
Thread->ActiveImpersonationInfo = 1;
Thread->ActiveImpersonationInfo = TRUE;
}
PACCESS_TOKEN
PsReferenceEffectiveToken(PETHREAD Thread,
PTOKEN_TYPE TokenType,
PUCHAR b,
PBOOLEAN EffectiveOnly,
PSECURITY_IMPERSONATION_LEVEL Level)
{
PEPROCESS Process;
PACCESS_TOKEN Token;
if (Thread->ActiveImpersonationInfo == 0)
if (Thread->ActiveImpersonationInfo == FALSE)
{
Process = Thread->ThreadsProcess;
*TokenType = TokenPrimary;
*b = 0;
*EffectiveOnly = FALSE;
Token = Process->Token;
}
else
{
Token = Thread->ImpersonationInfo->Token;
*TokenType = TokenImpersonation;
*b = Thread->ImpersonationInfo->Unknown2;
*Level = Thread->ImpersonationInfo->Level;
*EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly;
*Level = Thread->ImpersonationInfo->Level;
}
return(Token);
}
NTSTATUS STDCALL
NtImpersonateThread(IN HANDLE ThreadHandle,
IN HANDLE ThreadToImpersonateHandle,
@ -225,11 +230,12 @@ NtImpersonateThread(IN HANDLE ThreadHandle,
return(STATUS_SUCCESS);
}
NTSTATUS STDCALL
NtOpenThreadToken(IN HANDLE ThreadHandle,
IN ACCESS_MASK DesiredAccess,
IN BOOLEAN OpenAsSelf,
OUT PHANDLE TokenHandle)
NtOpenThreadToken (IN HANDLE ThreadHandle,
IN ACCESS_MASK DesiredAccess,
IN BOOLEAN OpenAsSelf,
OUT PHANDLE TokenHandle)
{
#if 0
PETHREAD Thread;
@ -250,39 +256,43 @@ NtOpenThreadToken(IN HANDLE ThreadHandle,
Token = PsReferencePrimaryToken(Thread->ThreadsProcess);
SepCreateImpersonationTokenDacl(Token);
#endif
return(STATUS_UNSUCCESSFUL);
return STATUS_NO_TOKEN;
}
/*
* @implemented
*/
PACCESS_TOKEN STDCALL
PsReferenceImpersonationToken(PETHREAD Thread,
PULONG Unknown1,
PULONG Unknown2,
SECURITY_IMPERSONATION_LEVEL* Level)
PACCESS_TOKEN STDCALL
PsReferenceImpersonationToken(IN PETHREAD Thread,
OUT PBOOLEAN CopyOnOpen,
OUT PBOOLEAN EffectiveOnly,
OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
{
if (Thread->ActiveImpersonationInfo == 0)
{
return(NULL);
}
*Level = Thread->ImpersonationInfo->Level;
*Unknown1 = Thread->ImpersonationInfo->Unknown1;
*Unknown2 = Thread->ImpersonationInfo->Unknown2;
ObReferenceObjectByPointer(Thread->ImpersonationInfo->Token,
if (Thread->ActiveImpersonationInfo == FALSE)
{
return NULL;
}
*ImpersonationLevel = Thread->ImpersonationInfo->Level;
*CopyOnOpen = Thread->ImpersonationInfo->CopyOnOpen;
*EffectiveOnly = Thread->ImpersonationInfo->EffectiveOnly;
ObReferenceObjectByPointer (Thread->ImpersonationInfo->Token,
TOKEN_ALL_ACCESS,
SepTokenObjectType,
KernelMode);
return(Thread->ImpersonationInfo->Token);
return Thread->ImpersonationInfo->Token;
}
VOID
PiBeforeBeginThread(CONTEXT c)
{
KeLowerIrql(PASSIVE_LEVEL);
}
VOID STDCALL
PiDeleteThread(PVOID ObjectBody)
{
@ -305,6 +315,7 @@ PiDeleteThread(PVOID ObjectBody)
DPRINT("PiDeleteThread() finished\n");
}
NTSTATUS
PsInitializeThread(HANDLE ProcessHandle,
PETHREAD* ThreadPtr,
@ -529,12 +540,14 @@ PsCreateTeb(HANDLE ProcessHandle,
return Status;
}
VOID STDCALL
LdrInitApcRundownRoutine(PKAPC Apc)
{
ExFreePool(Apc);
}
VOID STDCALL
LdrInitApcKernelRoutine(PKAPC Apc,
PKNORMAL_ROUTINE* NormalRoutine,
@ -545,6 +558,7 @@ LdrInitApcKernelRoutine(PKAPC Apc,
ExFreePool(Apc);
}
NTSTATUS STDCALL
NtCreateThread(PHANDLE ThreadHandle,
ACCESS_MASK DesiredAccess,
@ -700,31 +714,31 @@ PsCreateSystemThread(PHANDLE ThreadHandle,
return(STATUS_SUCCESS);
}
VOID
STDCALL
PspRunCreateThreadNotifyRoutines
(
PETHREAD CurrentThread,
BOOLEAN Create
)
{
ULONG i;
CLIENT_ID Cid = CurrentThread->Cid;
for(i = 0; i < PiThreadNotifyRoutineCount; ++ i)
PiThreadNotifyRoutine[i](Cid.UniqueProcess, Cid.UniqueThread, Create);
VOID STDCALL
PspRunCreateThreadNotifyRoutines(PETHREAD CurrentThread,
BOOLEAN Create)
{
ULONG i;
CLIENT_ID Cid = CurrentThread->Cid;
for (i = 0; i < PiThreadNotifyRoutineCount; i++)
{
PiThreadNotifyRoutine[i](Cid.UniqueProcess, Cid.UniqueThread, Create);
}
}
/*
* @implemented
*/
NTSTATUS STDCALL
PsSetCreateThreadNotifyRoutine(IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine)
{
if (PiThreadNotifyRoutineCount >= MAX_THREAD_NOTIFY_ROUTINE_COUNT)
{
return(STATUS_INSUFFICIENT_RESOURCES);
}
if (PiThreadNotifyRoutineCount >= MAX_THREAD_NOTIFY_ROUTINE_COUNT)
{
return(STATUS_INSUFFICIENT_RESOURCES);
}
PiThreadNotifyRoutine[PiThreadNotifyRoutineCount] = NotifyRoutine;
PiThreadNotifyRoutineCount++;

View file

@ -1,4 +1,4 @@
/* $Id: semgr.c,v 1.28 2003/12/14 17:44:02 hbirr Exp $
/* $Id: semgr.c,v 1.29 2004/03/14 18:13:19 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -219,33 +219,36 @@ NtAccessCheck(IN PSECURITY_DESCRIPTOR SecurityDescriptor,
/*
* @implemented
*/
VOID STDCALL SeReleaseSubjectContext (PSECURITY_SUBJECT_CONTEXT SubjectContext)
VOID STDCALL
SeReleaseSubjectContext (PSECURITY_SUBJECT_CONTEXT SubjectContext)
{
ObDereferenceObject(SubjectContext->PrimaryToken);
if (SubjectContext->ClientToken != NULL)
{
ObDereferenceObject(SubjectContext->ClientToken);
}
ObDereferenceObject (SubjectContext->PrimaryToken);
if (SubjectContext->ClientToken != NULL)
{
ObDereferenceObject (SubjectContext->ClientToken);
}
}
/*
* @implemented
*/
VOID STDCALL SeCaptureSubjectContext (PSECURITY_SUBJECT_CONTEXT SubjectContext)
VOID STDCALL
SeCaptureSubjectContext (PSECURITY_SUBJECT_CONTEXT SubjectContext)
{
PEPROCESS Process;
ULONG a;
ULONG b;
Process = PsGetCurrentThread()->ThreadsProcess;
SubjectContext->ProcessAuditId = Process;
SubjectContext->ClientToken =
PsReferenceImpersonationToken(PsGetCurrentThread(),
&a,
&b,
PEPROCESS Process;
BOOLEAN CopyOnOpen;
BOOLEAN EffectiveOnly;
Process = PsGetCurrentThread ()->ThreadsProcess;
SubjectContext->ProcessAuditId = Process;
SubjectContext->ClientToken =
PsReferenceImpersonationToken (PsGetCurrentThread(),
&CopyOnOpen,
&EffectiveOnly,
&SubjectContext->ImpersonationLevel);
SubjectContext->PrimaryToken = PsReferencePrimaryToken(Process);
SubjectContext->PrimaryToken = PsReferencePrimaryToken (Process);
}