[CSRSS]: Split off CSRSS into a more Windows-friendly model. CSRSS.EXE is simply...
[reactos.git] / reactos / subsystems / win32 / csrss / include / api.h
index 581e067..463ee50 100644 (file)
@@ -6,14 +6,44 @@
  * PURPOSE:         CSRSS API interface
  */
 
-#ifndef API_H_INCLUDED
-#define API_H_INCLUDED
+#pragma once
 
 #define NTOS_MODE_USER
 #include <ndk/ntndk.h>
 
 #include <csrss/csrss.h>
 
+typedef enum _CSR_THREAD_FLAGS
+{
+    CsrThreadAltertable = 0x1,
+    CsrThreadInTermination = 0x2,
+    CsrThreadTerminated = 0x4,
+    CsrThreadIsServerThread = 0x10
+} CSR_THREAD_FLAGS, *PCSR_THREAD_FLAGS;
+
+typedef enum _SHUTDOWN_RESULT
+{
+    CsrShutdownCsrProcess = 1,
+    CsrShutdownNonCsrProcess,
+    CsrShutdownCancelled
+} SHUTDOWN_RESULT, *PSHUTDOWN_RESULT;
+
+typedef enum _CSR_SHUTDOWN_FLAGS
+{
+    CsrShutdownSystem = 4,
+    CsrShutdownOther = 8
+} CSR_SHUTDOWN_FLAGS, *PCSR_SHUTDOWN_FLAGS;
+
+typedef enum _CSR_PROCESS_FLAGS
+{
+    CsrProcessTerminating = 0x1,
+    CsrProcessSkipShutdown = 0x2,
+    CsrProcessCreateNewGroup = 0x100,
+    CsrProcessTerminated = 0x200,
+    CsrProcessLastThreadTerminated = 0x400,
+    CsrProcessIsConsoleApp = 0x800
+} CSR_PROCESS_FLAGS, *PCSR_PROCESS_FLAGS;
+
 typedef struct Object_tt
 {
   LONG Type;
@@ -32,6 +62,13 @@ typedef struct ConsoleInput_t
 
 typedef struct tagCSRSS_CONSOLE *PCSRSS_CONSOLE;
 
+typedef struct _CSRSS_HANDLE
+{
+  Object_t *Object;
+  DWORD Access;
+  BOOL Inheritable;
+} CSRSS_HANDLE, *PCSRSS_HANDLE;
+
 typedef struct _CSRSS_PROCESS_DATA
 {
   PCSRSS_CONSOLE Console;
@@ -39,8 +76,9 @@ typedef struct _CSRSS_PROCESS_DATA
   BOOL bInheritHandles;
   RTL_CRITICAL_SECTION HandleTableLock;
   ULONG HandleTableSize;
-  Object_t ** HandleTable;
+  PCSRSS_HANDLE HandleTable;
   HANDLE ProcessId;
+  DWORD ProcessGroup;
   HANDLE Process;
   ULONG ShutdownLevel;
   ULONG ShutdownFlags;
@@ -52,9 +90,26 @@ typedef struct _CSRSS_PROCESS_DATA
   LIST_ENTRY ProcessEntry;
   PCONTROLDISPATCHER CtrlDispatcher;
   BOOL Terminated;
+  ULONG Flags;
+  ULONG ThreadCount;
+  LIST_ENTRY ThreadList;
 } CSRSS_PROCESS_DATA, *PCSRSS_PROCESS_DATA;
 
-typedef VOID (STDCALL *CSR_CLEANUP_OBJECT_PROC)(Object_t *Object);
+typedef struct _CSR_THREAD
+{
+    LARGE_INTEGER CreateTime;
+    LIST_ENTRY Link;
+    LIST_ENTRY HashLinks;
+    CLIENT_ID ClientId;
+    PCSRSS_PROCESS_DATA Process;
+    //struct _CSR_WAIT_BLOCK *WaitBlock;
+    HANDLE ThreadHandle;
+    ULONG Flags;
+    ULONG ReferenceCount;
+    ULONG ImpersonationCount;
+} CSR_THREAD, *PCSR_THREAD;
+
+typedef VOID (WINAPI *CSR_CLEANUP_OBJECT_PROC)(Object_t *Object);
 
 typedef struct tagCSRSS_OBJECT_DEFINITION
 {
@@ -62,7 +117,7 @@ typedef struct tagCSRSS_OBJECT_DEFINITION
   CSR_CLEANUP_OBJECT_PROC CsrCleanupObjectProc;
 } CSRSS_OBJECT_DEFINITION, *PCSRSS_OBJECT_DEFINITION;
 
-typedef NTSTATUS (STDCALL *CSRSS_API_PROC)(PCSRSS_PROCESS_DATA ProcessData,
+typedef NTSTATUS (WINAPI *CSRSS_API_PROC)(PCSRSS_PROCESS_DATA ProcessData,
                                            PCSR_API_MESSAGE Request);
 
 typedef struct _CSRSS_API_DEFINITION
@@ -82,7 +137,7 @@ typedef struct _CSRSS_LISTEN_DATA
   PCSRSS_API_DEFINITION *ApiDefinitions;
 } CSRSS_LISTEN_DATA, *PCSRSS_LISTEN_DATA;
 
-#define CSR_API(n) NTSTATUS STDCALL n (\
+#define CSR_API(n) NTSTATUS WINAPI n (\
 PCSRSS_PROCESS_DATA ProcessData,\
 PCSR_API_MESSAGE Request)
 
@@ -93,18 +148,19 @@ extern HANDLE hBootstrapOk;
 CSR_API(CsrConnectProcess);
 CSR_API(CsrCreateProcess);
 CSR_API(CsrTerminateProcess);
+CSR_API(CsrCreateThread);
 
 /* print.c */
-VOID STDCALL DisplayString(LPCWSTR lpwString);
-VOID STDCALL PrintString (char* fmt, ...);
+VOID WINAPI DisplayString(LPCWSTR lpwString);
+VOID WINAPI PrintString (char* fmt, ...);
 
 /* api/wapi.c */
 NTSTATUS FASTCALL CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions);
 VOID FASTCALL CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData,
                                 PCSR_API_MESSAGE Request);
-DWORD STDCALL ServerApiPortThread (PVOID PortHandle);
-DWORD STDCALL ServerSbApiPortThread (PVOID PortHandle);
-DWORD STDCALL Console_Api( PVOID unused );
+DWORD WINAPI ServerApiPortThread (PVOID PortHandle);
+DWORD WINAPI ServerSbApiPortThread (PVOID PortHandle);
+DWORD WINAPI Console_Api( PVOID unused );
 VOID
 NTAPI
 ClientConnectionThread(HANDLE ServerPort);
@@ -112,26 +168,29 @@ ClientConnectionThread(HANDLE ServerPort);
 extern HANDLE CsrssApiHeap;
 
 /* api/conio.c */
-VOID STDCALL CsrInitConsoleSupport(VOID);
+VOID WINAPI CsrInitConsoleSupport(VOID);
 
 /* api/process.c */
-typedef NTSTATUS (STDCALL *CSRSS_ENUM_PROCESS_PROC)(PCSRSS_PROCESS_DATA ProcessData,
+typedef NTSTATUS (WINAPI *CSRSS_ENUM_PROCESS_PROC)(PCSRSS_PROCESS_DATA ProcessData,
                                                     PVOID Context);
-VOID STDCALL CsrInitProcessData(VOID);
-PCSRSS_PROCESS_DATA STDCALL CsrGetProcessData(HANDLE ProcessId);
-PCSRSS_PROCESS_DATA STDCALL CsrCreateProcessData(HANDLE ProcessId);
-NTSTATUS STDCALL CsrFreeProcessData( HANDLE Pid );
-NTSTATUS STDCALL CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc, PVOID Context);
-
+VOID WINAPI CsrInitProcessData(VOID);
+PCSRSS_PROCESS_DATA WINAPI CsrGetProcessData(HANDLE ProcessId);
+PCSRSS_PROCESS_DATA WINAPI CsrCreateProcessData(HANDLE ProcessId);
+NTSTATUS WINAPI CsrFreeProcessData( HANDLE Pid );
+NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc, PVOID Context);
+PCSR_THREAD NTAPI CsrAddStaticServerThread(IN HANDLE hThread, IN PCLIENT_ID ClientId, IN  ULONG ThreadFlags);
+PCSR_THREAD NTAPI CsrLocateThreadInProcess(IN PCSRSS_PROCESS_DATA CsrProcess OPTIONAL, IN PCLIENT_ID Cid);
+PCSR_THREAD NTAPI CsrLocateThreadByClientId(OUT PCSRSS_PROCESS_DATA *Process OPTIONAL, IN PCLIENT_ID ClientId);
+                             
 /* api/handle.c */
 NTSTATUS FASTCALL CsrRegisterObjectDefinitions(PCSRSS_OBJECT_DEFINITION NewDefinitions);
-NTSTATUS STDCALL CsrInsertObject( PCSRSS_PROCESS_DATA ProcessData, PHANDLE Handle, Object_t *Object );
-NTSTATUS STDCALL CsrDuplicateHandleTable(PCSRSS_PROCESS_DATA SourceProcessData, PCSRSS_PROCESS_DATA TargetProcessData);
-NTSTATUS STDCALL CsrGetObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle, Object_t **Object );
-BOOL STDCALL CsrServerInitialization (int,char**,char**);
-NTSTATUS STDCALL CsrReleaseObjectByPointer(Object_t *Object);
-NTSTATUS STDCALL CsrReleaseObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Object );
-NTSTATUS STDCALL CsrVerifyObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Object );
+NTSTATUS WINAPI CsrInsertObject( PCSRSS_PROCESS_DATA ProcessData, PHANDLE Handle, Object_t *Object, DWORD Access, BOOL Inheritable );
+NTSTATUS WINAPI CsrDuplicateHandleTable(PCSRSS_PROCESS_DATA SourceProcessData, PCSRSS_PROCESS_DATA TargetProcessData);
+NTSTATUS WINAPI CsrGetObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle, Object_t **Object, DWORD Access );
+NTSTATUS NTAPI CsrServerInitialization(ULONG ArgumentCount, PCHAR Arguments[]);
+NTSTATUS WINAPI CsrReleaseObjectByPointer(Object_t *Object);
+NTSTATUS WINAPI CsrReleaseObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Object );
+NTSTATUS WINAPI CsrVerifyObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Object );
 
 CSR_API(CsrGetInputHandle);
 CSR_API(CsrGetOutputHandle);
@@ -149,7 +208,4 @@ CSR_API(CsrSetShutdownParameters);
 CSR_API(CsrSetLogonNotifyWindow);
 CSR_API(CsrRegisterLogonProcess);
 
-#endif /* ndef API_H_INCLUDED */
-
 /* EOF */
-