Implemented [Get/Set]ProcessShutdownParameters().
authorEric Kohl <eric.kohl@reactos.org>
Sun, 20 Oct 2002 16:40:12 +0000 (16:40 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sun, 20 Oct 2002 16:40:12 +0000 (16:40 +0000)
svn path=/trunk/; revision=3645

reactos/include/csrss/csrss.h
reactos/lib/kernel32/process/proc.c
reactos/subsys/csrss/api.h
reactos/subsys/csrss/api/process.c
reactos/subsys/csrss/api/wapi.c

index a4a0463..db20b01 100644 (file)
@@ -293,6 +293,13 @@ typedef struct
   DWORD Reserved;
 } CSRSS_EXIT_REACTOS_REQUEST, *PCSRSS_EXIT_REACTOS_REQUEST;
 
+typedef struct
+{
+  DWORD Level;
+  DWORD Flags;
+} CSRSS_SHUTDOWN_PARAMETERS, *PCSRSS_SHUTDOWN_PARAMETERS;
+
+
 
 #define CSRSS_MAX_WRITE_CONSOLE_REQUEST       \
       (MAX_MESSAGE_DATA - sizeof(ULONG) - sizeof(CSRSS_WRITE_CONSOLE_REQUEST))
@@ -343,7 +350,8 @@ typedef struct
 #define CSRSS_GET_NUM_INPUT_EVENTS          (0x1C)
 #define CSRSS_REGISTER_SERVICES_PROCESS     (0x1D)
 #define CSRSS_EXIT_REACTOS                  (0x1E)
-
+#define CSRSS_GET_SHUTDOWN_PARAMETERS       (0x1F)
+#define CSRSS_SET_SHUTDOWN_PARAMETERS       (0x20)
 
 
 /* Keep in sync with definition below. */
@@ -384,6 +392,7 @@ typedef struct
     CSRSS_GET_NUM_INPUT_EVENTS_REQUEST GetNumInputEventsRequest;
     CSRSS_REGISTER_SERVICES_PROCESS_REQUEST RegisterServicesProcessRequest;
     CSRSS_EXIT_REACTOS_REQUEST ExitReactosRequest;
+    CSRSS_SHUTDOWN_PARAMETERS SetShutdownParametersRequest;
   } Data;
 } CSRSS_API_REQUEST, *PCSRSS_API_REQUEST;
 
@@ -410,6 +419,7 @@ typedef struct
     CSRSS_READ_CONSOLE_OUTPUT_CHAR_REPLY ReadConsoleOutputCharReply;
     CSRSS_READ_CONSOLE_OUTPUT_ATTRIB_REPLY ReadConsoleOutputAttribReply;
     CSRSS_GET_NUM_INPUT_EVENTS_REPLY GetNumInputEventsReply;
+    CSRSS_SHUTDOWN_PARAMETERS GetShutdownParametersReply;
   } Data;
 } CSRSS_API_REPLY, *PCSRSS_API_REPLY;
 
index 954a2a7..a2ed9ee 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: proc.c,v 1.47 2002/10/20 11:56:00 chorns Exp $
+/* $Id: proc.c,v 1.48 2002/10/20 16:39:06 ekohl Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS system libraries
@@ -44,166 +44,185 @@ RegisterWaitForInputIdle (WaitForInputIdleType    lpfnRegisterWaitForInputIdle);
 WINBOOL STDCALL
 GetProcessId (HANDLE   hProcess, LPDWORD       lpProcessId);
 
-WINBOOL
-STDCALL
-GetProcessAffinityMask (
-       HANDLE  hProcess,
-       LPDWORD lpProcessAffinityMask,
-       LPDWORD lpSystemAffinityMask
-       )
+WINBOOL STDCALL
+GetProcessAffinityMask(HANDLE hProcess,
+                      LPDWORD lpProcessAffinityMask,
+                      LPDWORD lpSystemAffinityMask)
 {
-       if (    (NULL == lpProcessAffinityMask)
-               || (NULL == lpSystemAffinityMask)
-               )
-       {
-               SetLastError(ERROR_BAD_ARGUMENTS);
-               return FALSE;
-       }
-       /* FIXME: check hProcess is actually a process */
-       /* FIXME: query the kernel process object */
-       *lpProcessAffinityMask = 0x00000001;
-       *lpSystemAffinityMask  = 0x00000001;
-       return TRUE;
+  if ((NULL == lpProcessAffinityMask)
+      || (NULL == lpSystemAffinityMask))
+    {
+      SetLastError(ERROR_BAD_ARGUMENTS);
+      return(FALSE);
+    }
+
+  /* FIXME: check hProcess is actually a process */
+  /* FIXME: query the kernel process object */
+  *lpProcessAffinityMask = 0x00000001;
+  *lpSystemAffinityMask  = 0x00000001;
+
+  return(TRUE);
 }
 
 
-WINBOOL
-STDCALL
-GetProcessShutdownParameters (
-       LPDWORD lpdwLevel,
-       LPDWORD lpdwFlags
-       )
+WINBOOL STDCALL
+GetProcessShutdownParameters(LPDWORD lpdwLevel,
+                            LPDWORD lpdwFlags)
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+  CSRSS_API_REQUEST CsrRequest;
+  CSRSS_API_REPLY CsrReply;
+  NTSTATUS Status;
+
+  CsrRequest.Type = CSRSS_GET_SHUTDOWN_PARAMETERS;
+  Status = CsrClientCallServer(&CsrRequest,
+                              &CsrReply,
+                              sizeof(CSRSS_API_REQUEST),
+                              sizeof(CSRSS_API_REPLY));
+  if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrReply.Status))
+    {
+      SetLastError(Status);
+      return(FALSE);
+    }
+
+  *lpdwLevel = CsrReply.Data.GetShutdownParametersReply.Level;
+  *lpdwFlags = CsrReply.Data.GetShutdownParametersReply.Flags;
+
+  return(TRUE);
 }
 
 
-WINBOOL
-STDCALL
-GetProcessWorkingSetSize (
-       HANDLE  hProcess,
-       LPDWORD lpMinimumWorkingSetSize,
-       LPDWORD lpMaximumWorkingSetSize
-       )
+WINBOOL STDCALL
+SetProcessShutdownParameters(DWORD dwLevel,
+                            DWORD dwFlags)
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+  CSRSS_API_REQUEST CsrRequest;
+  CSRSS_API_REPLY CsrReply;
+  NTSTATUS Status;
+
+  CsrRequest.Data.SetShutdownParametersRequest.Level = dwLevel;
+  CsrRequest.Data.SetShutdownParametersRequest.Flags = dwFlags;
+
+  CsrRequest.Type = CSRSS_SET_SHUTDOWN_PARAMETERS;
+  Status = CsrClientCallServer(&CsrRequest,
+                              &CsrReply,
+                              sizeof(CSRSS_API_REQUEST),
+                              sizeof(CSRSS_API_REPLY));
+  if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrReply.Status))
+    {
+      SetLastError(Status);
+      return(FALSE);
+    }
+
+  return(TRUE);
 }
 
-WINBOOL
-STDCALL
-SetProcessShutdownParameters (
-       DWORD   dwLevel,
-       DWORD   dwFlags
-       )
+
+WINBOOL STDCALL
+GetProcessWorkingSetSize(HANDLE hProcess,
+                        LPDWORD lpMinimumWorkingSetSize,
+                        LPDWORD lpMaximumWorkingSetSize)
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return(FALSE);
 }
 
 
-WINBOOL
-STDCALL
-SetProcessWorkingSetSize (
-       HANDLE  hProcess,
-       DWORD   dwMinimumWorkingSetSize,
-       DWORD   dwMaximumWorkingSetSize
-       )
+WINBOOL STDCALL
+SetProcessWorkingSetSize(HANDLE hProcess,
+                        DWORD dwMinimumWorkingSetSize,
+                        DWORD dwMaximumWorkingSetSize)
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return(FALSE);
 }
 
 
 WINBOOL STDCALL
-GetProcessTimes (HANDLE                hProcess,
-                LPFILETIME     lpCreationTime,
-                LPFILETIME     lpExitTime,
-                LPFILETIME     lpKernelTime,
-                LPFILETIME     lpUserTime)
+GetProcessTimes(HANDLE hProcess,
+               LPFILETIME lpCreationTime,
+               LPFILETIME lpExitTime,
+               LPFILETIME lpKernelTime,
+               LPFILETIME lpUserTime)
 {
-  NTSTATUS             Status;
-  KERNEL_USER_TIMES    Kut;
-  
-  Status = NtQueryInformationProcess (hProcess,
-                                     ProcessTimes,
-                                     &Kut,
-                                     sizeof(Kut),
-                                     NULL
-                                     );
+  KERNEL_USER_TIMES Kut;
+  NTSTATUS Status;
+
+  Status = NtQueryInformationProcess(hProcess,
+                                    ProcessTimes,
+                                    &Kut,
+                                    sizeof(Kut),
+                                    NULL);
   if (!NT_SUCCESS(Status))
     {
-      SetLastErrorByStatus (Status);
-      return (FALSE);
+      SetLastErrorByStatus(Status);
+      return(FALSE);
     }
-  
+
   lpCreationTime->dwLowDateTime        = Kut.CreateTime.u.LowPart;
   lpCreationTime->dwHighDateTime = Kut.CreateTime.u.HighPart;
-  
+
   lpExitTime->dwLowDateTime = Kut.ExitTime.u.LowPart;
   lpExitTime->dwHighDateTime = Kut.ExitTime.u.HighPart;
-       
+
   lpKernelTime->dwLowDateTime = Kut.KernelTime.u.LowPart;
   lpKernelTime->dwHighDateTime = Kut.KernelTime.u.HighPart;
-  
+
   lpUserTime->dwLowDateTime = Kut.UserTime.u.LowPart;
   lpUserTime->dwHighDateTime = Kut.UserTime.u.HighPart;
-  
-  return (TRUE);
+
+  return(TRUE);
 }
 
 
-HANDLE STDCALL GetCurrentProcess (VOID)
+HANDLE STDCALL
+GetCurrentProcess(VOID)
 {
-       return((HANDLE)NtCurrentProcess());
+  return((HANDLE)NtCurrentProcess());
 }
 
 
-HANDLE STDCALL GetCurrentThread (VOID)
+HANDLE STDCALL
+GetCurrentThread(VOID)
 {
-   return((HANDLE)NtCurrentThread());
+  return((HANDLE)NtCurrentThread());
 }
 
 
-DWORD STDCALL GetCurrentProcessId (VOID)
+DWORD STDCALL
+GetCurrentProcessId(VOID)
 {
-   return((DWORD)GetTeb()->Cid.UniqueProcess);
+  return((DWORD)GetTeb()->Cid.UniqueProcess);
 }
 
 
-WINBOOL
-STDCALL
-GetExitCodeProcess (
-       HANDLE  hProcess,
-       LPDWORD lpExitCode
-       )
+WINBOOL STDCALL
+GetExitCodeProcess(HANDLE hProcess,
+                  LPDWORD lpExitCode)
 {
-   NTSTATUS errCode;
-   PROCESS_BASIC_INFORMATION ProcessBasic;
-   ULONG BytesWritten;
-   
-   errCode = NtQueryInformationProcess(hProcess,
-                                      ProcessBasicInformation,
-                                      &ProcessBasic,
-                                      sizeof(PROCESS_BASIC_INFORMATION),
-                                      &BytesWritten);
-   if (!NT_SUCCESS(errCode))
-     {
-       SetLastErrorByStatus (errCode);
-       return FALSE;
+  PROCESS_BASIC_INFORMATION ProcessBasic;
+  ULONG BytesWritten;
+  NTSTATUS Status;
+
+  Status = NtQueryInformationProcess(hProcess,
+                                    ProcessBasicInformation,
+                                    &ProcessBasic,
+                                    sizeof(PROCESS_BASIC_INFORMATION),
+                                    &BytesWritten);
+  if (!NT_SUCCESS(Status))
+    {
+      SetLastErrorByStatus(Status);
+      return(FALSE);
      }
-   memcpy(lpExitCode, &ProcessBasic.ExitStatus, sizeof(DWORD));
-   return TRUE;
+
+  memcpy(lpExitCode, &ProcessBasic.ExitStatus, sizeof(DWORD));
+
+  return(TRUE);
 }
 
 
-WINBOOL
-STDCALL
-GetProcessId (
-       HANDLE  hProcess,
-       LPDWORD lpProcessId 
-       )
+WINBOOL STDCALL
+GetProcessId(HANDLE hProcess,
+            LPDWORD lpProcessId)
 {
    NTSTATUS errCode;
    PROCESS_BASIC_INFORMATION ProcessBasic;
@@ -224,13 +243,10 @@ GetProcessId (
 }
 
 
-HANDLE
-STDCALL
-OpenProcess (
-       DWORD   dwDesiredAccess,
-       WINBOOL bInheritHandle,
-       DWORD   dwProcessId
-       )
+HANDLE STDCALL
+OpenProcess(DWORD dwDesiredAccess,
+           WINBOOL bInheritHandle,
+           DWORD dwProcessId)
 {
    NTSTATUS errCode;
    HANDLE ProcessHandle;
@@ -264,12 +280,9 @@ OpenProcess (
 }
 
 
-UINT
-STDCALL
-WinExec (
-       LPCSTR  lpCmdLine,
-       UINT    uCmdShow
-       )
+UINT STDCALL
+WinExec(LPCSTR lpCmdLine,
+       UINT uCmdShow)
 {
    STARTUPINFOA StartupInfo;
    PROCESS_INFORMATION  ProcessInformation;
@@ -308,8 +321,7 @@ WinExec (
 }
 
 
-VOID
-STDCALL
+VOID STDCALL
 RegisterWaitForInputIdle (
        WaitForInputIdleType    lpfnRegisterWaitForInputIdle
        )
@@ -319,8 +331,7 @@ RegisterWaitForInputIdle (
 }
 
 
-DWORD
-STDCALL
+DWORD STDCALL
 WaitForInputIdle (
        HANDLE  hProcess,
        DWORD   dwMilliseconds
@@ -330,20 +341,17 @@ WaitForInputIdle (
 }
 
 
-VOID
-STDCALL
-Sleep (
-       DWORD   dwMilliseconds
-       )
+VOID STDCALL
+Sleep(DWORD dwMilliseconds)
 {
-   SleepEx (dwMilliseconds, FALSE);
-   return;
+  SleepEx(dwMilliseconds, FALSE);
+  return;
 }
 
 
 DWORD STDCALL
-SleepEx (DWORD dwMilliseconds,
-        BOOL   bAlertable)
+SleepEx(DWORD dwMilliseconds,
+       BOOL bAlertable)
 {
   TIME Interval;
   NTSTATUS errCode;
@@ -376,56 +384,56 @@ SleepEx (DWORD    dwMilliseconds,
 VOID STDCALL
 GetStartupInfoW(LPSTARTUPINFOW lpStartupInfo)
 {
-   PRTL_USER_PROCESS_PARAMETERS Params;
+  PRTL_USER_PROCESS_PARAMETERS Params;
 
-   if (lpStartupInfo == NULL)
-     {
-       SetLastError(ERROR_INVALID_PARAMETER);
-       return;
-     }
+  if (lpStartupInfo == NULL)
+    {
+      SetLastError(ERROR_INVALID_PARAMETER);
+      return;
+    }
 
-   Params = NtCurrentPeb ()->ProcessParameters;
-
-   lpStartupInfo->cb = sizeof(STARTUPINFOW);
-   lpStartupInfo->lpDesktop = Params->DesktopInfo.Buffer;
-   lpStartupInfo->lpTitle = Params->WindowTitle.Buffer;
-   lpStartupInfo->dwX = Params->dwX;\r
-   lpStartupInfo->dwY = Params->dwY;\r
-   lpStartupInfo->dwXSize = Params->dwXSize;\r
-   lpStartupInfo->dwYSize = Params->dwYSize;\r
-   lpStartupInfo->dwXCountChars = Params->dwXCountChars;\r
-   lpStartupInfo->dwYCountChars = Params->dwYCountChars;\r
-   lpStartupInfo->dwFillAttribute = Params->dwFillAttribute;\r
-   lpStartupInfo->dwFlags = Params->dwFlags;\r
-   lpStartupInfo->wShowWindow = Params->wShowWindow;\r
-   lpStartupInfo->lpReserved = Params->ShellInfo.Buffer;
-   lpStartupInfo->cbReserved2 = Params->RuntimeInfo.Length;
-   lpStartupInfo->lpReserved2 = (LPBYTE)Params->RuntimeInfo.Buffer;
-
-   lpStartupInfo->hStdInput = Params->hStdInput;\r
-   lpStartupInfo->hStdOutput = Params->hStdOutput;\r
-   lpStartupInfo->hStdError = Params->hStdError;\r
+  Params = NtCurrentPeb()->ProcessParameters;
+
+  lpStartupInfo->cb = sizeof(STARTUPINFOW);
+  lpStartupInfo->lpDesktop = Params->DesktopInfo.Buffer;
+  lpStartupInfo->lpTitle = Params->WindowTitle.Buffer;
+  lpStartupInfo->dwX = Params->dwX;
+  lpStartupInfo->dwY = Params->dwY;
+  lpStartupInfo->dwXSize = Params->dwXSize;
+  lpStartupInfo->dwYSize = Params->dwYSize;
+  lpStartupInfo->dwXCountChars = Params->dwXCountChars;
+  lpStartupInfo->dwYCountChars = Params->dwYCountChars;
+  lpStartupInfo->dwFillAttribute = Params->dwFillAttribute;
+  lpStartupInfo->dwFlags = Params->dwFlags;
+  lpStartupInfo->wShowWindow = Params->wShowWindow;
+  lpStartupInfo->lpReserved = Params->ShellInfo.Buffer;
+  lpStartupInfo->cbReserved2 = Params->RuntimeInfo.Length;
+  lpStartupInfo->lpReserved2 = (LPBYTE)Params->RuntimeInfo.Buffer;
+
+  lpStartupInfo->hStdInput = Params->hStdInput;
+  lpStartupInfo->hStdOutput = Params->hStdOutput;
+  lpStartupInfo->hStdError = Params->hStdError;
 }
 
 
 VOID STDCALL
 GetStartupInfoA(LPSTARTUPINFOA lpStartupInfo)
 {
-   PRTL_USER_PROCESS_PARAMETERS Params;
-   ANSI_STRING AnsiString;
+  PRTL_USER_PROCESS_PARAMETERS Params;
+  ANSI_STRING AnsiString;
 
-   if (lpStartupInfo == NULL)
-     {
+  if (lpStartupInfo == NULL)
+    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return;
-     }
+    }
 
-   Params = NtCurrentPeb ()->ProcessParameters;
+  Params = NtCurrentPeb ()->ProcessParameters;
 
-   RtlAcquirePebLock ();
+  RtlAcquirePebLock ();
 
-   if (lpLocalStartupInfo == NULL)
-     {
+  if (lpLocalStartupInfo == NULL)
+    {
        /* create new local startup info (ansi) */
        lpLocalStartupInfo = RtlAllocateHeap (RtlGetProcessHeap (),
                                              0,
@@ -451,21 +459,21 @@ GetStartupInfoA(LPSTARTUPINFOA lpStartupInfo)
                                      TRUE);
        lpLocalStartupInfo->lpReserved = AnsiString.Buffer;
 
-       lpLocalStartupInfo->dwX = Params->dwX;\r
-       lpLocalStartupInfo->dwY = Params->dwY;\r
-       lpLocalStartupInfo->dwXSize = Params->dwXSize;\r
-       lpLocalStartupInfo->dwYSize = Params->dwYSize;\r
-       lpLocalStartupInfo->dwXCountChars = Params->dwXCountChars;\r
-       lpLocalStartupInfo->dwYCountChars = Params->dwYCountChars;\r
-       lpLocalStartupInfo->dwFillAttribute = Params->dwFillAttribute;\r
-       lpLocalStartupInfo->dwFlags = Params->dwFlags;\r
-       lpLocalStartupInfo->wShowWindow = Params->wShowWindow;\r
+       lpLocalStartupInfo->dwX = Params->dwX;
+       lpLocalStartupInfo->dwY = Params->dwY;
+       lpLocalStartupInfo->dwXSize = Params->dwXSize;
+       lpLocalStartupInfo->dwYSize = Params->dwYSize;
+       lpLocalStartupInfo->dwXCountChars = Params->dwXCountChars;
+       lpLocalStartupInfo->dwYCountChars = Params->dwYCountChars;
+       lpLocalStartupInfo->dwFillAttribute = Params->dwFillAttribute;
+       lpLocalStartupInfo->dwFlags = Params->dwFlags;
+       lpLocalStartupInfo->wShowWindow = Params->wShowWindow;
        lpLocalStartupInfo->cbReserved2 = Params->RuntimeInfo.Length;
        lpLocalStartupInfo->lpReserved2 = (LPBYTE)Params->RuntimeInfo.Buffer;
 
-       lpLocalStartupInfo->hStdInput = Params->hStdInput;\r
-       lpLocalStartupInfo->hStdOutput = Params->hStdOutput;\r
-       lpLocalStartupInfo->hStdError = Params->hStdError;\r
+       lpLocalStartupInfo->hStdInput = Params->hStdInput;
+       lpLocalStartupInfo->hStdOutput = Params->hStdOutput;
+       lpLocalStartupInfo->hStdError = Params->hStdError;
      }
 
    RtlReleasePebLock ();
@@ -482,14 +490,14 @@ FlushInstructionCache (HANDLE     hProcess,
                       LPCVOID  lpBaseAddress,
                       DWORD    dwSize)
 {
-  NTSTATUS     errCode;
+  NTSTATUS Status;
   
-  errCode = NtFlushInstructionCache (hProcess,
-                                    (PVOID) lpBaseAddress,
-                                    dwSize);
-  if (!NT_SUCCESS(errCode))
+  Status = NtFlushInstructionCache(hProcess,
+                                  (PVOID)lpBaseAddress,
+                                  dwSize);
+  if (!NT_SUCCESS(Status))
     {
-      SetLastErrorByStatus (errCode);
+      SetLastErrorByStatus(Status);
       return FALSE;
     }
   return TRUE;
@@ -497,7 +505,7 @@ FlushInstructionCache (HANDLE       hProcess,
 
 
 VOID STDCALL
-ExitProcess (UINT      uExitCode)
+ExitProcess(UINT uExitCode)
 {
   CSRSS_API_REQUEST CsrRequest;
   CSRSS_API_REPLY CsrReply;
@@ -528,8 +536,9 @@ WINBOOL STDCALL
 TerminateProcess (HANDLE       hProcess,
                  UINT  uExitCode)
 {
-  NTSTATUS Status = NtTerminateProcess (hProcess, uExitCode);
-      
+  NTSTATUS Status;
+
+  Status = NtTerminateProcess (hProcess, uExitCode);
   if (NT_SUCCESS(Status))
     {
       return TRUE;
@@ -559,8 +568,8 @@ FatalAppExitA (UINT uAction,
 
 
 VOID STDCALL
-FatalAppExitW (UINT    uAction,
-              LPCWSTR  lpMessageText)
+FatalAppExitW(UINT uAction,
+             LPCWSTR lpMessageText)
 {
   return;
 }
index f5f407e..436055a 100644 (file)
@@ -79,6 +79,8 @@ typedef struct
   ULONG HandleTableSize;
   Object_t ** HandleTable;
   ULONG ProcessId;
+  ULONG ShutdownLevel;
+  ULONG ShutdownFlags;
   HANDLE ConsoleEvent;
   PVOID CsrSectionViewBase;
   ULONG CsrSectionViewSize;
@@ -124,6 +126,8 @@ CSR_API(CsrReadConsoleOutputAttrib);
 CSR_API(CsrGetNumberOfConsoleInputEvents);
 CSR_API(CsrRegisterServicesProcess);
 CSR_API(CsrExitReactos);
+CSR_API(CsrGetShutdownParameters);
+CSR_API(CsrSetShutdownParameters);
 
 /* print.c */
 VOID STDCALL DisplayString(LPCWSTR lpwString);
index f6360bd..96c8b0e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: process.c,v 1.20 2002/10/01 06:41:56 ei Exp $
+/* $Id: process.c,v 1.21 2002/10/20 16:40:12 ekohl Exp $
  *
  * reactos/subsys/csrss/api/process.c
  *
@@ -134,6 +134,10 @@ CSR_API(CsrCreateProcess)
        return(STATUS_NO_MEMORY);
      }
 
+   /* Set default shutdown parameters */
+   NewProcessData->ShutdownLevel = 0x280;
+   NewProcessData->ShutdownFlags = 0;
+
    if (Request->Data.CreateProcessRequest.Flags & DETACHED_PROCESS)
      {
        NewProcessData->Console = NULL;
@@ -225,4 +229,33 @@ CSR_API(CsrConnectProcess)
    return(STATUS_SUCCESS);
 }
 
+CSR_API(CsrGetShutdownParameters)
+{
+  Reply->Header.MessageSize = sizeof(CSRSS_API_REPLY);
+  Reply->Header.DataSize = sizeof(CSRSS_API_REPLY) -
+    sizeof(LPC_MESSAGE_HEADER);
+
+  Reply->Data.GetShutdownParametersReply.Level = ProcessData->ShutdownLevel;
+  Reply->Data.GetShutdownParametersReply.Flags = ProcessData->ShutdownFlags;
+
+  Reply->Status = STATUS_SUCCESS;
+
+  return(STATUS_SUCCESS);
+}
+
+CSR_API(CsrSetShutdownParameters)
+{
+  Reply->Header.MessageSize = sizeof(CSRSS_API_REPLY);
+  Reply->Header.DataSize = sizeof(CSRSS_API_REPLY) -
+    sizeof(LPC_MESSAGE_HEADER);
+
+  ProcessData->ShutdownLevel = Request->Data.SetShutdownParametersRequest.Level;
+  ProcessData->ShutdownFlags = Request->Data.SetShutdownParametersRequest.Flags;
+
+  Reply->Status = STATUS_SUCCESS;
+
+  return(STATUS_SUCCESS);
+}
+
+
 /* EOF */
index 45507b4..1e12da9 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: wapi.c,v 1.21 2002/10/20 14:53:43 ekohl Exp $
+/* $Id: wapi.c,v 1.22 2002/10/20 16:40:12 ekohl Exp $
  * 
  * reactos/subsys/csrss/api/wapi.c
  *
@@ -58,6 +58,8 @@ static const CsrFunc CsrFuncs[] = {
    CsrGetNumberOfConsoleInputEvents,
    CsrRegisterServicesProcess,
    CsrExitReactos,
+   CsrGetShutdownParameters,
+   CsrSetShutdownParameters,
    0 };
 
 static void Thread_Api2(HANDLE ServerPort)