SM: simplify and fix client (subsystem servers) management.
[reactos.git] / reactos / subsys / smss / smss.h
index 2bd3480..7d2a26b 100644 (file)
@@ -1,16 +1,16 @@
 #ifndef _SMSS_H_INCLUDED_
 #define _SMSS_H_INCLUDED_
 
+#include <stdio.h>
+#include <windows.h>
 #define NTOS_MODE_USER
-#include <ntos.h>
+#include <ndk/ntndk.h>
+
 #include <sm/api.h>
 #include <sm/helper.h>
 
-#define CHILD_CSRSS     0
-#define CHILD_WINLOGON  1
-
 /* smss.c */
-extern HANDLE SmSsProcessId;
+extern ULONG SmSsProcessId;
 
 /* init.c */
 NTSTATUS InitSessionManager(VOID);
@@ -48,52 +48,57 @@ NTSTATUS SmCreatePagingFiles(VOID);
 NTSTATUS SmInitializeRegistry(VOID);
 
 /* initss.c */
+NTSTATUS STDCALL SmRegisterInternalSubsystem(LPWSTR,USHORT,PHANDLE);
 NTSTATUS SmLoadSubsystems(VOID);
-NTSTATUS SmRunCsrss(VOID);
-NTSTATUS SmRunWinlogon(VOID);
 
 /* smapi.c */
 #define SMAPI(n) \
 NTSTATUS FASTCALL n (PSM_PORT_MESSAGE Request)
+PSM_CONNECT_DATA FASTCALL SmpGetConnectData (PSM_PORT_MESSAGE);
+NTSTATUS SmCreateApiPort(VOID);
+VOID STDCALL SmpApiThread(PVOID);
+
 
 /* smapiexec.c */
 NTSTATUS STDCALL SmCreateUserProcess(LPWSTR ImagePath,
                                     LPWSTR CommandLine,
                                     BOOLEAN WaitForIt,
                                     PLARGE_INTEGER Timeout OPTIONAL,
-                                    BOOLEAN TerminateIt,
-                                    PRTL_PROCESS_INFO ProcessInfo OPTIONAL);
-NTSTATUS STDCALL
-SmLookupSubsystem (IN     PWSTR   Name,
-                  IN OUT PWSTR   Data,
-                  IN OUT PULONG  DataLength,
-                  IN OUT PULONG  DataType,
-                  IN     BOOLEAN Expand);
+                                    PRTL_USER_PROCESS_INFORMATION UserProcessInfo OPTIONAL);
 NTSTATUS FASTCALL SmExecPgm(PSM_PORT_MESSAGE);
 
 /* smapicomp.c */
 NTSTATUS FASTCALL SmCompSes(PSM_PORT_MESSAGE);
 
-NTSTATUS SmCreateApiPort(VOID);
-VOID STDCALL SmpApiThread(PVOID);
+/* smapiquery.c */
+NTSTATUS FASTCALL SmQryInfo(PSM_PORT_MESSAGE);
 
 /* client.c */
+#define SM_CLIENT_FLAG_CANDIDATE   0x8000
+#define SM_CLIENT_FLAG_INITIALIZED 0x0001
+#define SM_CLIENT_FLAG_REQUIRED    0x0002
 typedef struct _SM_CLIENT_DATA
 {
-       USHORT  SubsystemId;
-       BOOL    Initialized;
-       HANDLE  ServerProcess;
-       HANDLE  ApiPort;
-       HANDLE  ApiPortThread;
-       HANDLE  SbApiPort;
-       WCHAR   SbApiPortName [SM_SB_NAME_MAX_LENGTH];
-       struct _SM_CLIENT_DATA * Next;
-       
+  RTL_CRITICAL_SECTION  Lock;
+  WCHAR                 ProgramName [SM_SB_NAME_MAX_LENGTH];
+  USHORT                SubsystemId;
+  WORD                  Flags;
+  WORD                  Unused;
+  ULONG                 ServerProcessId;
+  HANDLE               ServerProcess;
+  HANDLE               ApiPort;
+  HANDLE               ApiPortThread;
+  HANDLE               SbApiPort;
+  WCHAR                        SbApiPortName [SM_SB_NAME_MAX_LENGTH];
+
 } SM_CLIENT_DATA, *PSM_CLIENT_DATA;
-NTSTATUS SmInitializeClientManagement(VOID);
-NTSTATUS SmpRegisterSmss(VOID);
-NTSTATUS STDCALL SmCreateClient(PSM_PORT_MESSAGE,PSM_CLIENT_DATA*);
-NTSTATUS STDCALL SmDestroyClient(ULONG);
+NTSTATUS SmInitializeClientManagement (VOID);
+NTSTATUS STDCALL SmCreateClient (PRTL_USER_PROCESS_INFORMATION,PWSTR);
+NTSTATUS STDCALL SmDestroyClient (ULONG);
+NTSTATUS STDCALL SmBeginClientInitialization (PSM_PORT_MESSAGE,PSM_CLIENT_DATA*);
+NTSTATUS STDCALL SmCompleteClientInitialization (ULONG);
+NTSTATUS FASTCALL SmGetClientBasicInformation (PSM_BASIC_INFORMATION);
+NTSTATUS FASTCALL SmGetSubSystemInformation (PSM_SUBSYSTEM_INFORMATION);
 
 /* debug.c */
 extern HANDLE DbgSsApiPort;