#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 ULONG SmSsProcessId;
/* init.c */
NTSTATUS InitSessionManager(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(HANDLE Port);
+VOID STDCALL SmpApiThread(PVOID);
+
+
+/* smapiexec.c */
+NTSTATUS STDCALL SmCreateUserProcess(LPWSTR ImagePath,
+ LPWSTR CommandLine,
+ BOOLEAN WaitForIt,
+ PLARGE_INTEGER Timeout OPTIONAL,
+ PRTL_USER_PROCESS_INFORMATION UserProcessInfo OPTIONAL);
+NTSTATUS FASTCALL SmExecPgm(PSM_PORT_MESSAGE);
+
+/* smapicomp.c */
+NTSTATUS FASTCALL SmCompSes(PSM_PORT_MESSAGE);
+
+/* 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 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 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;
extern HANDLE DbgUiApiPort;
NTSTATUS SmInitializeDbgSs(VOID);
+/* print.c */
+VOID STDCALL DisplayString(LPCWSTR lpwString);
+VOID STDCALL PrintString (char* fmt, ...);
+
#endif /* _SMSS_H_INCLUDED_ */
/* EOF */