mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 13:34:53 +00:00
[SMSS2]: Make not-implemented functions return a failure. Cleanup the SMSS hack in the _main function to be cleaner. Add a few more functions and flags to the header. Fix a function prototype.
svn path=/trunk/; revision=55507
This commit is contained in:
parent
2adafb93b0
commit
09c7bc60a5
|
@ -42,7 +42,7 @@ SmpCreateForeignSession(IN PSM_API_MSG SmApiMsg,
|
||||||
IN HANDLE SmApiPort)
|
IN HANDLE SmApiPort)
|
||||||
{
|
{
|
||||||
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -52,7 +52,7 @@ SmpSessionComplete(IN PSM_API_MSG SmApiMsg,
|
||||||
IN HANDLE SmApiPort)
|
IN HANDLE SmApiPort)
|
||||||
{
|
{
|
||||||
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -62,7 +62,7 @@ SmpTerminateForeignSession(IN PSM_API_MSG SmApiMsg,
|
||||||
IN HANDLE SmApiPort)
|
IN HANDLE SmApiPort)
|
||||||
{
|
{
|
||||||
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -72,7 +72,7 @@ SmpExecPgm(IN PSM_API_MSG SmApiMsg,
|
||||||
IN HANDLE SmApiPort)
|
IN HANDLE SmApiPort)
|
||||||
{
|
{
|
||||||
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -82,7 +82,7 @@ SmpLoadDeferedSubsystem(IN PSM_API_MSG SmApiMsg,
|
||||||
IN HANDLE SmApiPort)
|
IN HANDLE SmApiPort)
|
||||||
{
|
{
|
||||||
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -92,7 +92,7 @@ SmpStartCsr(IN PSM_API_MSG SmApiMsg,
|
||||||
IN HANDLE SmApiPort)
|
IN HANDLE SmApiPort)
|
||||||
{
|
{
|
||||||
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -102,7 +102,7 @@ SmpStopCsr(IN PSM_API_MSG SmApiMsg,
|
||||||
IN HANDLE SmApiPort)
|
IN HANDLE SmApiPort)
|
||||||
{
|
{
|
||||||
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
DPRINT1("%s is not yet implemented\n", __FUNCTION__);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
PSM_API_HANDLER SmpApiDispatch[SmMaxApiNumber] =
|
PSM_API_HANDLER SmpApiDispatch[SmMaxApiNumber] =
|
||||||
|
|
|
@ -265,7 +265,8 @@ SmpExecuteCommand(IN PUNICODE_STRING CommandLine,
|
||||||
&Directory,
|
&Directory,
|
||||||
CommandLine,
|
CommandLine,
|
||||||
MuSessionId,
|
MuSessionId,
|
||||||
ProcessId);
|
ProcessId,
|
||||||
|
Flags);
|
||||||
}
|
}
|
||||||
else if (Flags & SMP_INVALID_PATH)
|
else if (Flags & SMP_INVALID_PATH)
|
||||||
{
|
{
|
||||||
|
@ -590,7 +591,7 @@ ExpLoadInitialProcess(IN PINIT_BUFFER InitBuffer,
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LaunchOldSmss(OUT PHANDLE Handles)
|
LaunchOldSmss(VOID)
|
||||||
{
|
{
|
||||||
PINIT_BUFFER InitBuffer;
|
PINIT_BUFFER InitBuffer;
|
||||||
PRTL_USER_PROCESS_PARAMETERS ProcessParameters = NULL;
|
PRTL_USER_PROCESS_PARAMETERS ProcessParameters = NULL;
|
||||||
|
@ -598,9 +599,6 @@ LaunchOldSmss(OUT PHANDLE Handles)
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PCHAR Environment;
|
PCHAR Environment;
|
||||||
|
|
||||||
/* No handles at first */
|
|
||||||
Handles[0] = Handles[1] = NULL;
|
|
||||||
|
|
||||||
/* Initialize the system root */
|
/* Initialize the system root */
|
||||||
RtlInitUnicodeString(&SmpSystemRoot, SharedUserData->NtSystemRoot);
|
RtlInitUnicodeString(&SmpSystemRoot, SharedUserData->NtSystemRoot);
|
||||||
|
|
||||||
|
@ -623,8 +621,6 @@ LaunchOldSmss(OUT PHANDLE Handles)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the handle and status */
|
/* Return the handle and status */
|
||||||
Handles[0] = ProcessInfo->ProcessHandle;
|
|
||||||
Handles[1] = ProcessInfo->ProcessHandle;
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -723,6 +719,8 @@ _main(IN INT argc,
|
||||||
/* Enter SEH so we can terminate correctly if anything goes wrong */
|
/* Enter SEH so we can terminate correctly if anything goes wrong */
|
||||||
_SEH2_TRY
|
_SEH2_TRY
|
||||||
{
|
{
|
||||||
|
LARGE_INTEGER Infinite = {{0x80000000, 0x7FFFFFFF}};
|
||||||
|
|
||||||
/* Initialize SMSS */
|
/* Initialize SMSS */
|
||||||
Status = SmpInit(&InitialCommand, Handles);
|
Status = SmpInit(&InitialCommand, Handles);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
@ -731,9 +729,10 @@ _main(IN INT argc,
|
||||||
RtlInitUnicodeString(&DbgString, L"Session Manager Initialization");
|
RtlInitUnicodeString(&DbgString, L"Session Manager Initialization");
|
||||||
Parameters[1] = Status;
|
Parameters[1] = Status;
|
||||||
DPRINT1("SMSS-2 Loaded... Launching original SMSS\n");
|
DPRINT1("SMSS-2 Loaded... Launching original SMSS\n");
|
||||||
Status = LaunchOldSmss(Handles);
|
|
||||||
goto SetupHack;
|
|
||||||
//_SEH2_LEAVE; Hack so that setup can work. will go away later
|
//_SEH2_LEAVE; Hack so that setup can work. will go away later
|
||||||
|
Status = LaunchOldSmss();
|
||||||
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
return NtDelayExecution(FALSE, &Infinite);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the global flags */
|
/* Get the global flags */
|
||||||
|
@ -750,19 +749,6 @@ _main(IN INT argc,
|
||||||
DPRINT1("Global Flags Set to SMSS Debugging: Not yet supported\n");
|
DPRINT1("Global Flags Set to SMSS Debugging: Not yet supported\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Launch the original SMSS */
|
|
||||||
DPRINT1("SMSS-2 Loaded... Launching original SMSS\n");
|
|
||||||
Status = LaunchOldSmss(Handles);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
/* Fail and raise a hard error */
|
|
||||||
DPRINT1("SMSS: Execute Old SMSS failed\n");
|
|
||||||
RtlInitUnicodeString(&DbgString,
|
|
||||||
L"Session Manager LaunchOldSmss");
|
|
||||||
Parameters[1] = Status;
|
|
||||||
_SEH2_LEAVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Execute the initial command (Winlogon.exe) */
|
/* Execute the initial command (Winlogon.exe) */
|
||||||
Status = SmpExecuteInitialCommand(0, &InitialCommand, &Handles[1], NULL);
|
Status = SmpExecuteInitialCommand(0, &InitialCommand, &Handles[1], NULL);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
@ -772,7 +758,11 @@ _main(IN INT argc,
|
||||||
RtlInitUnicodeString(&DbgString,
|
RtlInitUnicodeString(&DbgString,
|
||||||
L"Session Manager ExecuteInitialCommand");
|
L"Session Manager ExecuteInitialCommand");
|
||||||
Parameters[1] = Status;
|
Parameters[1] = Status;
|
||||||
_SEH2_LEAVE;
|
//_SEH2_LEAVE;
|
||||||
|
DPRINT1("SMSS-2 Loaded... Launching original SMSS\n");
|
||||||
|
Status = LaunchOldSmss();
|
||||||
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
return NtDelayExecution(FALSE, &Infinite);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if we're already attached to a session */
|
/* Check if we're already attached to a session */
|
||||||
|
@ -789,7 +779,6 @@ _main(IN INT argc,
|
||||||
SmpReleasePrivilege(State);
|
SmpReleasePrivilege(State);
|
||||||
|
|
||||||
/* Wait on either CSRSS or Winlogon to die */
|
/* Wait on either CSRSS or Winlogon to die */
|
||||||
SetupHack:
|
|
||||||
Status = NtWaitForMultipleObjects(RTL_NUMBER_OF(Handles),
|
Status = NtWaitForMultipleObjects(RTL_NUMBER_OF(Handles),
|
||||||
Handles,
|
Handles,
|
||||||
WaitAny,
|
WaitAny,
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
#define SMP_SUBSYSTEM_FLAG 0x08
|
#define SMP_SUBSYSTEM_FLAG 0x08
|
||||||
#define SMP_INVALID_PATH 0x10
|
#define SMP_INVALID_PATH 0x10
|
||||||
#define SMP_DEFERRED_FLAG 0x20
|
#define SMP_DEFERRED_FLAG 0x20
|
||||||
|
#define SMP_POSIX_FLAG 0x100
|
||||||
|
#define SMP_OS2_FLAG 0x200
|
||||||
|
|
||||||
/* STRUCTURES *****************************************************************/
|
/* STRUCTURES *****************************************************************/
|
||||||
|
|
||||||
|
@ -87,6 +89,7 @@ extern LIST_ENTRY SmpSubSystemsToLoad;
|
||||||
extern LIST_ENTRY SmpExecuteList;
|
extern LIST_ENTRY SmpExecuteList;
|
||||||
extern LIST_ENTRY SmpSubSystemList;
|
extern LIST_ENTRY SmpSubSystemList;
|
||||||
extern ULONG AttachedSessionId;
|
extern ULONG AttachedSessionId;
|
||||||
|
extern BOOLEAN SmpDebug;
|
||||||
|
|
||||||
/* FUNCTIONS ******************************************************************/
|
/* FUNCTIONS ******************************************************************/
|
||||||
|
|
||||||
|
@ -182,7 +185,8 @@ SmpLoadSubSystem(
|
||||||
IN PUNICODE_STRING Directory,
|
IN PUNICODE_STRING Directory,
|
||||||
IN PUNICODE_STRING CommandLine,
|
IN PUNICODE_STRING CommandLine,
|
||||||
IN ULONG MuSessionId,
|
IN ULONG MuSessionId,
|
||||||
OUT PHANDLE ProcessId
|
OUT PHANDLE ProcessId,
|
||||||
|
IN ULONG Flags
|
||||||
);
|
);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -250,4 +254,44 @@ SmpDereferenceSubsystem(
|
||||||
IN PSMP_SUBSYSTEM SubSystem
|
IN PSMP_SUBSYSTEM SubSystem
|
||||||
);
|
);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
SmpSbCreateSession(
|
||||||
|
IN PVOID Reserved,
|
||||||
|
IN PSMP_SUBSYSTEM OtherSubsystem,
|
||||||
|
IN PRTL_USER_PROCESS_INFORMATION ProcessInformation,
|
||||||
|
IN ULONG MuSessionId,
|
||||||
|
IN PCLIENT_ID DbgClientId
|
||||||
|
);
|
||||||
|
|
||||||
|
ULONG
|
||||||
|
NTAPI
|
||||||
|
SmpAllocateSessionId(
|
||||||
|
IN PSMP_SUBSYSTEM Subsystem,
|
||||||
|
IN PSMP_SUBSYSTEM OtherSubsystem
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
SmpDeleteSession(
|
||||||
|
IN ULONG SessionId
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
SmpCheckDuplicateMuSessionId(
|
||||||
|
IN ULONG MuSessionId
|
||||||
|
);
|
||||||
|
|
||||||
|
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
|
||||||
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -120,7 +120,8 @@ SmpLoadSubSystem(IN PUNICODE_STRING FileName,
|
||||||
IN PUNICODE_STRING Directory,
|
IN PUNICODE_STRING Directory,
|
||||||
IN PUNICODE_STRING CommandLine,
|
IN PUNICODE_STRING CommandLine,
|
||||||
IN ULONG MuSessionId,
|
IN ULONG MuSessionId,
|
||||||
OUT PHANDLE ProcessId)
|
OUT PHANDLE ProcessId,
|
||||||
|
IN ULONG Flags)
|
||||||
{
|
{
|
||||||
DPRINT1("Should start subsystem %wZ for Session: %lx\n", FileName, MuSessionId);
|
DPRINT1("Should start subsystem %wZ for Session: %lx\n", FileName, MuSessionId);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
|
Loading…
Reference in a new issue