mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
Fix some prototypes.
svn path=/trunk/; revision=8722
This commit is contained in:
parent
e040902fff
commit
2ce08a79bb
5 changed files with 169 additions and 142 deletions
|
@ -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,
|
||||
|
|
|
@ -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 */
|
||||
|
||||
/*
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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++;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue