From 2ce08a79bbb9739b7c2c0f62dc3fa6897d05a98f Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 14 Mar 2004 18:13:19 +0000 Subject: [PATCH] Fix some prototypes. svn path=/trunk/; revision=8722 --- reactos/include/ddk/psfuncs.h | 70 +++++----- reactos/ntoskrnl/include/internal/ps.h | 24 ++-- reactos/ntoskrnl/include/internal/se.h | 2 +- reactos/ntoskrnl/ps/create.c | 172 +++++++++++++------------ reactos/ntoskrnl/se/semgr.c | 43 ++++--- 5 files changed, 169 insertions(+), 142 deletions(-) diff --git a/reactos/include/ddk/psfuncs.h b/reactos/include/ddk/psfuncs.h index c2e3bc7bc60..222d4464397 100644 --- a/reactos/include/ddk/psfuncs.h +++ b/reactos/include/ddk/psfuncs.h @@ -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, diff --git a/reactos/ntoskrnl/include/internal/ps.h b/reactos/ntoskrnl/include/internal/ps.h index 0ecf08bc6e8..ad4d3799c80 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.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 /* 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 @@ -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 */ /* diff --git a/reactos/ntoskrnl/include/internal/se.h b/reactos/ntoskrnl/include/internal/se.h index a646e21a253..f98ccaacaf8 100644 --- a/reactos/ntoskrnl/include/internal/se.h +++ b/reactos/ntoskrnl/include/internal/se.h @@ -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, diff --git a/reactos/ntoskrnl/ps/create.c b/reactos/ntoskrnl/ps/create.c index e2586c43af3..de169fa12cb 100644 --- a/reactos/ntoskrnl/ps/create.c +++ b/reactos/ntoskrnl/ps/create.c @@ -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++; diff --git a/reactos/ntoskrnl/se/semgr.c b/reactos/ntoskrnl/se/semgr.c index 5c89762268a..908e693f579 100644 --- a/reactos/ntoskrnl/se/semgr.c +++ b/reactos/ntoskrnl/se/semgr.c @@ -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); }