#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);
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;