36 SbApiMsg->h.u2.ZeroInit = 0;
37 SbApiMsg->h.u1.s1.DataLength = MessageLength + 8;
38 SbApiMsg->h.u1.s1.TotalLength =
sizeof(
SB_API_MSG);
53 if (!(--SubSystem->ReferenceCount) && (SubSystem->Terminating))
56 if (SubSystem->Event)
NtClose(SubSystem->Event);
57 if (SubSystem->ProcessHandle)
NtClose(SubSystem->ProcessHandle);
58 if (SubSystem->SbApiPort)
NtClose(SubSystem->SbApiPort);
92 NextEntry = NextEntry->
Flink;
128 NextEntry = NextEntry->
Flink;
163 if (
Flags & 0x80) MuSessionId = 0;
171 if (!Subsystem)
break;
249 DPRINT1(
"SMSS: SmpLoadSubSystem - SmpLocateKnownSubSysByType Failed\n");
267 DPRINT1(
"SMSS: SmpLoadSubSystem - SmpCallCsrCreateProcess Failed with Status %lx\n",
286 &ProcessInformation);
290 DPRINT1(
"SMSS: SmpLoadSubSystem - SmpExecuteImage Failed with Status %lx\n",
331 DPRINT1(
"SMSS: SmpLoadSubSystem - SmpLocateKnownSubSysByType Failed with Status %lx for sessionid %lu\n",
348 DPRINT1(
"SMSS: SmpLoadSubSystem - NtDuplicateObject Failed with Status %lx for sessionid %lu\n",
365 DPRINT1(
"SMSS: SmpLoadSubSystem - NtDuplicateObject Failed with Status %lx for sessionid %lu\n",
376 SbApiMsg.
h.u2.ZeroInit = 0;
388 DPRINT1(
"SMSS: SmpLoadSubSystem - NtRequestWaitReplyPort Failed with Status %lx for sessionid %lu\n",
400 DPRINT1(
"SMSS: SmpLoadSubSystem - NtResumeThread failed Status %lx\n",
Status);
415 DPRINT1(
"SMSS: SmpLoadSubSystem - session deleted\n");
423 DPRINT1(
"SMSS: SmpLoadSubSystem - Timeout waiting for subsystem connect with Status %lx for sessionid %lu\n",
445 DPRINT1(
"SMSS: Did not detach from Session Space: SessionId=%x Flags=%x Status=%x\n",
457 DPRINT1(
"SMSS: Did not detach from Session Space: SessionId=%x Flags=%x Status=%x\n",
471 DPRINT1(
"SMSS: SmpStartCsr, Couldn't Detach from Session Space. Status=%x\n",
Status);
531 NextEntry = NextEntry->
Flink;
561 sizeof(*MuSessionId));
564 DPRINT1(
"SMSS: Session space creation failed\n");
576 L"\\SystemRoot\\System32\\win32k.sys");
584 DPRINT1(
"SMSS: Load of WIN32K failed.\n");
592 NextEntry = NextEntry->
Flink;
624 NextEntry = NextEntry->
Flink;
651 InitialCommand->Length,
669 NextEntry = NextEntry->
Flink;
NTSYSAPI NTSTATUS NTAPI NtSetSystemInformation(IN INT SystemInformationClass, IN PVOID SystemInformation, IN ULONG SystemInformationLength)
#define SystemExtendServiceTableInformation
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define NT_SUCCESS(StatCode)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
IN PLARGE_INTEGER IN PLARGE_INTEGER PEPROCESS ProcessId
struct _FileName FileName
NTSTATUS NTAPI LdrQueryImageFileExecutionOptions(_In_ PUNICODE_STRING SubKey, _In_ PCWSTR ValueName, _In_ ULONG Type, _Out_ PVOID Buffer, _In_ ULONG BufferSize, _Out_opt_ PULONG ReturnedLength)
MMRESULT CreateSession(DeviceType device_type, UINT device_id, SessionInfo **session_info)
#define SE_LOAD_DRIVER_PRIVILEGE
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
_Out_ _Inout_ POEM_STRING DestinationString
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
#define THREAD_ALL_ACCESS
#define PROCESS_ALL_ACCESS
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI NtTerminateProcess(HANDLE ProcessHandle, LONG ExitStatus)
#define NtCurrentProcess()
NTSTATUS NTAPI NtDelayExecution(IN BOOLEAN Alertable, IN PLARGE_INTEGER DelayInterval)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSYSAPI NTSTATUS NTAPI NtWaitForSingleObject(IN HANDLE hObject, IN BOOLEAN bAlertable, IN PLARGE_INTEGER Timeout)
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
#define IMAGE_SUBSYSTEM_POSIX_CUI
#define IMAGE_SUBSYSTEM_OS2_CUI
#define IMAGE_SUBSYSTEM_WINDOWS_GUI
#define IMAGE_SUBSYSTEM_NATIVE
NTSTATUS NTAPI NtSetEvent(IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
NTSTATUS NTAPI NtCreateEvent(OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN EVENT_TYPE EventType, IN BOOLEAN InitialState)
NTSTATUS NTAPI NtRequestWaitReplyPort(IN HANDLE PortHandle, IN PPORT_MESSAGE LpcRequest, IN OUT PPORT_MESSAGE LpcReply)
NTSTATUS NTAPI NtResumeThread(IN HANDLE ThreadHandle, OUT PULONG SuspendCount OPTIONAL)
#define STATUS_DELETE_PENDING
#define STATUS_OBJECT_PATH_SYNTAX_BAD
#define STATUS_NO_SUCH_PACKAGE
NTSTRSAFEAPI RtlStringCbCatW(_Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
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)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
LIST_ENTRY SmpSubSystemList
LIST_ENTRY SmpSubSystemsToLoad
LIST_ENTRY SmpExecuteList
UNICODE_STRING SmpDefaultLibPath
VOID NTAPI SmpTranslateSystemPartitionInformation(VOID)
LIST_ENTRY SmpSetupExecuteList
struct _SB_CREATE_SESSION_MSG SB_CREATE_SESSION_MSG
struct _SB_API_MSG SB_API_MSG
BOOLEAN NTAPI SmpCheckDuplicateMuSessionId(IN ULONG MuSessionId)
ULONG NTAPI SmpAllocateSessionId(IN PSMP_SUBSYSTEM Subsystem, IN PSMP_SUBSYSTEM OtherSubsystem)
VOID NTAPI SmpDeleteSession(IN ULONG SessionId)
NTSTATUS NTAPI SmpExecuteCommand(IN PUNICODE_STRING CommandLine, IN ULONG MuSessionId, OUT PHANDLE ProcessId, IN ULONG Flags)
NTSTATUS NTAPI SmpExecuteImage(IN PUNICODE_STRING FileName, IN PUNICODE_STRING Directory, IN PUNICODE_STRING CommandLine, IN ULONG MuSessionId, IN ULONG Flags, IN PRTL_USER_PROCESS_INFORMATION ProcessInformation)
VOID NTAPI SmpReleasePrivilege(IN PVOID State)
#define SMP_DEFERRED_FLAG
NTSTATUS NTAPI SmpAcquirePrivilege(IN ULONG Privilege, OUT PVOID *PrivilegeStat)
#define SMP_SUBSYSTEM_FLAG
HANDLE SmpWindowsSubSysProcess
WCHAR InitialCommandBuffer[256]
NTSTATUS NTAPI SmpCallCsrCreateProcess(IN PSB_API_MSG SbApiMsg, IN USHORT MessageLength, IN HANDLE PortHandle)
NTSTATUS NTAPI SmpLoadSubSystemsForMuSession(IN PULONG MuSessionId, OUT PHANDLE ProcessId, IN PUNICODE_STRING InitialCommand)
RTL_CRITICAL_SECTION SmpKnownSubSysLock
VOID NTAPI SmpDereferenceSubsystem(IN PSMP_SUBSYSTEM SubSystem)
NTSTATUS NTAPI SmpLoadSubSystem(IN PUNICODE_STRING FileName, IN PUNICODE_STRING Directory, IN PUNICODE_STRING CommandLine, IN ULONG MuSessionId, OUT PHANDLE ProcessId, IN ULONG Flags)
PSMP_SUBSYSTEM NTAPI SmpLocateKnownSubSysByCid(IN PCLIENT_ID ClientId)
PSMP_SUBSYSTEM NTAPI SmpLocateKnownSubSysByType(IN ULONG MuSessionId, IN ULONG ImageType)
HANDLE SmpWindowsSubSysProcessId
BOOLEAN RegPosixSingleInstance
LIST_ENTRY SmpKnownSubSysHead
base for all directory entries
base of all file and directory entries
struct _LIST_ENTRY * Blink
struct _LIST_ENTRY * Flink
union _SB_API_MSG::@3542::@3544::@3546 u
SB_CREATE_PROCESS_MSG CreateProcess
SB_CREATE_SESSION_MSG CreateSession
#define CONTAINING_RECORD(address, type, field)
#define STATUS_OBJECT_NAME_NOT_FOUND
_Must_inspect_result_ _In_ ULONG Flags
_Out_ PCLIENT_ID ClientId