[WIN32CSR] Clean up the debris from r47314: Removed some redundant code, reorganized...
[reactos.git] / reactos / subsystems / win32 / csrss / include / api.h
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: subsys/csrss/include/api.h
6 * PURPOSE: CSRSS API interface
7 */
8
9 #pragma once
10
11 #define NTOS_MODE_USER
12 #include <ndk/ntndk.h>
13
14 #include <csrss/csrss.h>
15
16 typedef enum _CSR_THREAD_FLAGS
17 {
18 CsrThreadAltertable = 0x1,
19 CsrThreadInTermination = 0x2,
20 CsrThreadTerminated = 0x4,
21 CsrThreadIsServerThread = 0x10
22 } CSR_THREAD_FLAGS, *PCSR_THREAD_FLAGS;
23
24 typedef enum _SHUTDOWN_RESULT
25 {
26 CsrShutdownCsrProcess = 1,
27 CsrShutdownNonCsrProcess,
28 CsrShutdownCancelled
29 } SHUTDOWN_RESULT, *PSHUTDOWN_RESULT;
30
31 typedef enum _CSR_SHUTDOWN_FLAGS
32 {
33 CsrShutdownSystem = 4,
34 CsrShutdownOther = 8
35 } CSR_SHUTDOWN_FLAGS, *PCSR_SHUTDOWN_FLAGS;
36
37 typedef enum _CSR_PROCESS_FLAGS
38 {
39 CsrProcessTerminating = 0x1,
40 CsrProcessSkipShutdown = 0x2,
41 CsrProcessCreateNewGroup = 0x100,
42 CsrProcessTerminated = 0x200,
43 CsrProcessLastThreadTerminated = 0x400,
44 CsrProcessIsConsoleApp = 0x800
45 } CSR_PROCESS_FLAGS, *PCSR_PROCESS_FLAGS;
46
47 typedef struct _CSRSS_PROCESS_DATA
48 {
49 struct tagCSRSS_CONSOLE *Console;
50 struct tagCSRSS_CONSOLE *ParentConsole;
51 BOOL bInheritHandles;
52 RTL_CRITICAL_SECTION HandleTableLock;
53 ULONG HandleTableSize;
54 struct _CSRSS_HANDLE *HandleTable;
55 HANDLE ProcessId;
56 DWORD ProcessGroup;
57 HANDLE Process;
58 ULONG ShutdownLevel;
59 ULONG ShutdownFlags;
60 HANDLE ConsoleEvent;
61 PVOID CsrSectionViewBase;
62 ULONG CsrSectionViewSize;
63 HANDLE ServerCommunicationPort;
64 struct _CSRSS_PROCESS_DATA * next;
65 LIST_ENTRY ProcessEntry;
66 PCONTROLDISPATCHER CtrlDispatcher;
67 BOOL Terminated;
68 ULONG Flags;
69 ULONG ThreadCount;
70 LIST_ENTRY ThreadList;
71 } CSRSS_PROCESS_DATA, *PCSRSS_PROCESS_DATA;
72
73 typedef struct _CSR_THREAD
74 {
75 LARGE_INTEGER CreateTime;
76 LIST_ENTRY Link;
77 LIST_ENTRY HashLinks;
78 CLIENT_ID ClientId;
79 PCSRSS_PROCESS_DATA Process;
80 //struct _CSR_WAIT_BLOCK *WaitBlock;
81 HANDLE ThreadHandle;
82 ULONG Flags;
83 ULONG ReferenceCount;
84 ULONG ImpersonationCount;
85 } CSR_THREAD, *PCSR_THREAD;
86
87 typedef NTSTATUS (WINAPI *CSRSS_API_PROC)(PCSRSS_PROCESS_DATA ProcessData,
88 PCSR_API_MESSAGE Request);
89
90 typedef struct _CSRSS_API_DEFINITION
91 {
92 ULONG Type;
93 ULONG MinRequestSize;
94 CSRSS_API_PROC Handler;
95 } CSRSS_API_DEFINITION, *PCSRSS_API_DEFINITION;
96
97 #define CSRSS_DEFINE_API(Func, Handler) \
98 { Func, sizeof(CSRSS_##Func), Handler }
99
100 typedef struct _CSRSS_LISTEN_DATA
101 {
102 HANDLE ApiPortHandle;
103 ULONG ApiDefinitionsCount;
104 PCSRSS_API_DEFINITION *ApiDefinitions;
105 } CSRSS_LISTEN_DATA, *PCSRSS_LISTEN_DATA;
106
107 #define CSR_API(n) NTSTATUS WINAPI n (\
108 PCSRSS_PROCESS_DATA ProcessData,\
109 PCSR_API_MESSAGE Request)
110
111 /* init.c */
112 extern HANDLE hBootstrapOk;
113 NTSTATUS NTAPI CsrServerInitialization(ULONG ArgumentCount, PCHAR Arguments[]);
114
115 /* api/process.c */
116 CSR_API(CsrConnectProcess);
117 CSR_API(CsrCreateProcess);
118 CSR_API(CsrTerminateProcess);
119 CSR_API(CsrSrvCreateThread);
120 CSR_API(CsrGetShutdownParameters);
121 CSR_API(CsrSetShutdownParameters);
122
123 /* api/wapi.c */
124 NTSTATUS FASTCALL CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions);
125 VOID FASTCALL CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData,
126 PCSR_API_MESSAGE Request);
127 DWORD WINAPI ServerSbApiPortThread (PVOID PortHandle);
128 VOID NTAPI ClientConnectionThread(HANDLE ServerPort);
129
130 extern HANDLE CsrssApiHeap;
131
132 /* api/process.c */
133 typedef NTSTATUS (WINAPI *CSRSS_ENUM_PROCESS_PROC)(PCSRSS_PROCESS_DATA ProcessData,
134 PVOID Context);
135 VOID WINAPI CsrInitProcessData(VOID);
136 PCSRSS_PROCESS_DATA WINAPI CsrGetProcessData(HANDLE ProcessId);
137 PCSRSS_PROCESS_DATA WINAPI CsrCreateProcessData(HANDLE ProcessId);
138 NTSTATUS WINAPI CsrFreeProcessData( HANDLE Pid );
139 NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc, PVOID Context);
140 PCSR_THREAD NTAPI CsrAddStaticServerThread(IN HANDLE hThread, IN PCLIENT_ID ClientId, IN ULONG ThreadFlags);
141 PCSR_THREAD NTAPI CsrLocateThreadInProcess(IN PCSRSS_PROCESS_DATA CsrProcess OPTIONAL, IN PCLIENT_ID Cid);
142 PCSR_THREAD NTAPI CsrLocateThreadByClientId(OUT PCSRSS_PROCESS_DATA *Process OPTIONAL, IN PCLIENT_ID ClientId);
143 NTSTATUS NTAPI CsrLockProcessByClientId(IN HANDLE Pid, OUT PCSRSS_PROCESS_DATA *CsrProcess OPTIONAL);
144 NTSTATUS NTAPI CsrCreateThread(IN PCSRSS_PROCESS_DATA CsrProcess, IN HANDLE hThread, IN PCLIENT_ID ClientId);
145 NTSTATUS NTAPI CsrUnlockProcess(IN PCSRSS_PROCESS_DATA CsrProcess);
146
147 //hack
148 VOID NTAPI CsrThreadRefcountZero(IN PCSR_THREAD CsrThread);
149
150 /* api/user.c */
151 CSR_API(CsrRegisterServicesProcess);
152
153 /* EOF */