86 &SmApiMsg->h.ClientId);
96 ProcessInformation =
SmExecPgm->ProcessInformation;
100 SmExecPgm->ProcessInformation.ProcessHandle,
110 DPRINT1(
"SmExecPgm: NtDuplicateObject (Process) Failed %lx\n",
Status);
116 SmExecPgm->ProcessInformation.ThreadHandle,
127 DPRINT1(
"SmExecPgm: NtDuplicateObject (Thread) Failed %lx\n",
Status);
158 HANDLE InitialCommandProcess, InitialCommandProcessId, WindowsSubSysProcessId;
162 &WindowsSubSysProcessId,
166 DPRINT1(
"SMSS: SmpLoadSubSystemsForMuSession failed with status 0x%08x\n",
Status);
178 &InitialCommandProcess,
179 &InitialCommandProcessId);
182 DPRINT1(
"SMSS: SmpExecuteInitialCommand failed with status 0x%08x\n",
Status);
188 NtClose(InitialCommandProcess);
190 SmStartCsr->WindowsSubSysProcessId = WindowsSubSysProcessId;
191 SmStartCsr->SmpInitialCommandProcessId = InitialCommandProcessId;
254 &SbApiMsg->h.ClientId);
263 if ((CidSubsystem) && (Accept))
267 SbApiMsg->ConnectionInfo.SubsystemType);
268 if (TypeSubsystem == CidSubsystem)
272 DPRINT1(
"SMSS: Connection from SubSystem rejected\n");
273 DPRINT1(
"SMSS: Image type already being served\n");
278 CidSubsystem->
ImageType = SbApiMsg->ConnectionInfo.SubsystemType;
300 DPRINT1(
"Rejecting connectiond due to lack of memory\n");
311 PortView.
Length =
sizeof(PortView);
330 if (CidSubsystem) CidSubsystem->
PortHandle = PortHandle;
337 SbApiMsg->ConnectionInfo.SbApiPortName[119] =
UNICODE_NULL;
339 SbApiMsg->ConnectionInfo.SbApiPortName);
350 DPRINT1(
"SMSS: Connect back to Sb %wZ failed %lx\n", &SubsystemPort,
Status);
357 else if (CidSubsystem)
391 sizeof(ProcessInformation),
406 if (ReplyMsg)
DPRINT1(
"SMSS: Failed to reply to calling thread, retrying.\n");
413 switch (RequestMsg.
h.u2.s2.Type)
451 DPRINT1(
"Invalid session API\n");
464 ReplyMsg = &RequestMsg;
NTSTATUS NTAPI SmpHandleConnectionRequest(IN HANDLE SmApiPort, IN PSB_API_MSG SbApiMsg)
NTSTATUS NTAPI SmStartCsr(IN HANDLE SmApiPort, OUT PULONG pMuSessionId, IN PUNICODE_STRING CommandLine, OUT PHANDLE pWindowsSubSysProcessId, OUT PHANDLE pInitialCommandProcessId)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
NTSTATUS NTAPI SmpStopCsr(IN PSM_API_MSG SmApiMsg, IN PSMP_CLIENT_CONTEXT ClientContext, IN HANDLE SmApiPort)
#define THREAD_ALL_ACCESS
#define PROCESS_ALL_ACCESS
#define PROCESS_QUERY_INFORMATION
NTSTATUS(NTAPI * PSM_API_HANDLER)(IN PSM_API_MSG SmApiMsg, IN PSMP_CLIENT_CONTEXT ClientContext, IN HANDLE SmApiPort)
#define STATUS_INVALID_PARAMETER
NTSTATUS NTAPI SmpStartCsr(IN PSM_API_MSG SmApiMsg, IN PSMP_CLIENT_CONTEXT ClientContext, IN HANDLE SmApiPort)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
NTSTATUS NTAPI SmpLoadDeferedSubsystem(IN PSM_API_MSG SmApiMsg, IN PSMP_CLIENT_CONTEXT ClientContext, IN HANDLE SmApiPort)
ULONG NTAPI SmpApiLoop(IN PVOID Parameter)
NTSTATUS NTAPI SmpExecuteInitialCommand(IN ULONG MuSessionId, IN PUNICODE_STRING InitialCommand, IN HANDLE InitialCommandProcess, OUT PHANDLE ReturnPid)
NTSTATUS NTAPI NtOpenProcess(OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId)
struct _SMP_CLIENT_CONTEXT SMP_CLIENT_CONTEXT
NTSTATUS NTAPI SmpGetProcessMuSessionId(IN HANDLE ProcessHandle, OUT PULONG SessionId)
SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
PSMP_SUBSYSTEM NTAPI SmpLocateKnownSubSysByCid(IN PCLIENT_ID ClientId)
return STATUS_NOT_IMPLEMENTED
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define PROCESS_DUP_HANDLE
NTSYSAPI NTSTATUS __cdecl RtlSetThreadIsCritical(_In_ BOOLEAN NewValue, _Out_opt_ PBOOLEAN OldValue, _In_ BOOLEAN NeedBreaks)
volatile LONG SmTotalApiThreads
PSM_API_HANDLER SmpApiDispatch[SmpMaxApiNumber - SmpCreateForeignSessionApi]
NTSTATUS NTAPI NtDelayExecution(IN BOOLEAN Alertable, IN PLARGE_INTEGER DelayInterval)
#define NtCurrentProcess()
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
NTSTATUS NTAPI NtAcceptConnectPort(OUT PHANDLE PortHandle, IN PVOID PortContext OPTIONAL, IN PPORT_MESSAGE ReplyMessage, IN BOOLEAN AcceptConnection, IN OUT PPORT_VIEW ServerView OPTIONAL, OUT PREMOTE_PORT_VIEW ClientView OPTIONAL)
NTSTATUS NTAPI NtConnectPort(OUT PHANDLE PortHandle, IN PUNICODE_STRING PortName, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, IN OUT PPORT_VIEW ClientView OPTIONAL, IN OUT PREMOTE_PORT_VIEW ServerView OPTIONAL, OUT PULONG MaxMessageLength OPTIONAL, IN OUT PVOID ConnectionInformation OPTIONAL, IN OUT PULONG ConnectionInformationLength OPTIONAL)
NTSTATUS NTAPI NtSetEvent(IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
#define NT_SUCCESS(StatCode)
PSMP_SUBSYSTEM NTAPI SmpLocateKnownSubSysByType(IN ULONG MuSessionId, IN ULONG ImageType)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSTATUS NTAPI SmpSbCreateSession(IN PVOID Reserved, IN PSMP_SUBSYSTEM OtherSubsystem, IN PRTL_USER_PROCESS_INFORMATION ProcessInformation, IN ULONG MuSessionId, IN PCLIENT_ID DbgClientId)
NTSTATUS NTAPI SmExecPgm(IN HANDLE SmApiPort, IN PRTL_USER_PROCESS_INFORMATION ProcessInformation, IN BOOLEAN DebugFlag)
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define SECURITY_DYNAMIC_TRACKING
NTSTATUS NTAPI NtReplyWaitReceivePort(IN HANDLE PortHandle, OUT PVOID *PortContext OPTIONAL, IN PPORT_MESSAGE ReplyMessage OPTIONAL, OUT PPORT_MESSAGE ReceiveMessage)
NTSTATUS NTAPI SmpLoadSubSystemsForMuSession(IN PULONG MuSessionId, OUT PHANDLE ProcessId, IN PUNICODE_STRING InitialCommand)
VOID NTAPI SmpDereferenceSubsystem(IN PSMP_SUBSYSTEM SubSystem)
NTSTATUS NTAPI SmpTerminateForeignSession(IN PSM_API_MSG SmApiMsg, IN PSMP_CLIENT_CONTEXT ClientContext, IN HANDLE SmApiPort)
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
struct _SMP_CLIENT_CONTEXT * PSMP_CLIENT_CONTEXT
NTSTATUS NTAPI NtDuplicateObject(IN HANDLE SourceProcessHandle, IN HANDLE SourceHandle, IN HANDLE TargetProcessHandle OPTIONAL, OUT PHANDLE TargetHandle OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG HandleAttributes, IN ULONG Options)
NTSTATUS NTAPI NtCompleteConnectPort(IN HANDLE PortHandle)
#define InitializeObjectAttributes(p, n, a, r, s)
NTSTATUS NTAPI SmpExecPgm(IN PSM_API_MSG SmApiMsg, IN PSMP_CLIENT_CONTEXT ClientContext, IN HANDLE SmApiPort)
_In_ HANDLE ProcessHandle
long __cdecl _InterlockedExchangeAdd(_Interlocked_operand_ long volatile *_Addend, long _Value)
NTSTATUS NTAPI SmpCreateForeignSession(IN PSM_API_MSG SmApiMsg, IN PSMP_CLIENT_CONTEXT ClientContext, IN HANDLE SmApiPort)
NTSTATUS NTAPI NtQueryInformationProcess(_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _Out_ PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength)
NTSTATUS NTAPI SmpSessionComplete(IN PSM_API_MSG SmApiMsg, IN PSMP_CLIENT_CONTEXT ClientContext, IN HANDLE SmApiPort)