51b362174f77406d43fe9fd3abfea2debc19cad2
[reactos.git] / reactos / include / ddk / psfuncs.h
1 /* $Id: psfuncs.h,v 1.24 2003/06/20 16:19:33 ekohl Exp $
2 */
3 #ifndef _INCLUDE_DDK_PSFUNCS_H
4 #define _INCLUDE_DDK_PSFUNCS_H
5
6 NTSTATUS STDCALL PsAssignImpersonationToken (struct _ETHREAD* Thread,
7 HANDLE TokenHandle);
8
9 HANDLE STDCALL PsGetCurrentProcessId(VOID);
10 HANDLE STDCALL PsGetCurrentThreadId(VOID);
11
12 /*
13 * FUNCTION: Creates a thread which executes in kernel mode
14 * ARGUMENTS:
15 * ThreadHandle (OUT) = Caller supplied storage for the returned thread
16 * handle
17 * DesiredAccess = Requested access to the thread
18 * ObjectAttributes = Object attributes (optional)
19 * ProcessHandle = Handle of process thread will run in
20 * NULL to use system process
21 * ClientId (OUT) = Caller supplied storage for the returned client id
22 * of the thread (optional)
23 * StartRoutine = Entry point for the thread
24 * StartContext = Argument supplied to the thread when it begins
25 * execution
26 * RETURNS: Success or failure status
27 */
28 NTSTATUS STDCALL PsCreateSystemThread(PHANDLE ThreadHandle,
29 ACCESS_MASK DesiredAccess,
30 POBJECT_ATTRIBUTES ObjectAttributes,
31 HANDLE ProcessHandle,
32 PCLIENT_ID ClientId,
33 PKSTART_ROUTINE StartRoutine,
34 PVOID StartContext);
35 NTSTATUS STDCALL PsTerminateSystemThread(NTSTATUS ExitStatus);
36
37 NTSTATUS STDCALL PsCreateSystemProcess(PHANDLE ProcessHandle,
38 ACCESS_MASK DesiredAccess,
39 POBJECT_ATTRIBUTES ObjectAttributes);
40
41 NTSTATUS STDCALL PsCreateWin32Process(struct _EPROCESS* Process);
42 NTSTATUS STDCALL PsCreateWin32Thread(struct _ETHREAD* Thread);
43
44 VOID STDCALL
45 PsEstablishWin32Callouts (PW32_PROCESS_CALLBACK W32ProcessCallback,
46 PW32_THREAD_CALLBACK W32ThreadCallback,
47 PVOID Param3,
48 PVOID Param4,
49 ULONG W32ThreadSize,
50 ULONG W32ProcessSize);
51
52 #define PsGetCurrentProcess() IoGetCurrentProcess()
53 #define PsGetCurrentThread() ((struct _ETHREAD*) (KeGetCurrentThread()))
54
55 PACCESS_TOKEN STDCALL PsReferenceImpersonationToken(struct _ETHREAD* Thread,
56 PULONG Unknown1,
57 PULONG Unknown2,
58 SECURITY_IMPERSONATION_LEVEL*
59 Level);
60 PACCESS_TOKEN STDCALL PsReferencePrimaryToken(struct _EPROCESS* Process);
61 NTSTATUS STDCALL PsAssignImpersonationToken(struct _ETHREAD* Thread,
62 HANDLE TokenHandle);
63
64 VOID STDCALL PsImpersonateClient(struct _ETHREAD* Thread,
65 PACCESS_TOKEN Token,
66 UCHAR b,
67 UCHAR c,
68 SECURITY_IMPERSONATION_LEVEL Level);
69 VOID STDCALL PsRevertToSelf(VOID);
70
71 BOOLEAN STDCALL PsGetVersion (PULONG MajorVersion OPTIONAL,
72 PULONG MinorVersion OPTIONAL,
73 PULONG BuildNumber OPTIONAL,
74 PUNICODE_STRING CSDVersion OPTIONAL);
75
76 LARGE_INTEGER STDCALL PsGetProcessExitTime(VOID);
77 BOOLEAN STDCALL PsIsThreadTerminating(struct _ETHREAD* Thread);
78
79 NTSTATUS STDCALL PsLookupProcessByProcessId(IN PVOID ProcessId,
80 OUT PEPROCESS *Process);
81
82 NTSTATUS STDCALL PsLookupProcessThreadByCid(IN PCLIENT_ID Cid,
83 OUT PEPROCESS *Process OPTIONAL,
84 OUT struct _ETHREAD **Thread);
85 // OUT PETHREAD *Thread);
86
87 NTSTATUS STDCALL PsLookupThreadByThreadId(IN PVOID ThreadId,
88 OUT struct _ETHREAD **Thread);
89 // OUT PETHREAD *Thread);
90
91 NTSTATUS STDCALL
92 PsSetCreateProcessNotifyRoutine(IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
93 IN BOOLEAN Remove);
94
95 NTSTATUS STDCALL
96 PsSetCreateThreadNotifyRoutine(IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
97
98 #endif
99
100 /* EOF */