- Implemented CsrGetInputHandle, CsrGetOutputHandle and CsrCloseHandle.
authorHartmut Birr <osexpert@googlemail.com>
Mon, 24 Feb 2003 23:20:16 +0000 (23:20 +0000)
committerHartmut Birr <osexpert@googlemail.com>
Mon, 24 Feb 2003 23:20:16 +0000 (23:20 +0000)
svn path=/trunk/; revision=4193

reactos/include/csrss/csrss.h
reactos/subsys/csrss/api.h
reactos/subsys/csrss/api/process.c
reactos/subsys/csrss/api/wapi.c

index d13ece7..3b37ee3 100644 (file)
@@ -337,6 +337,21 @@ typedef struct
   DWORD Length;
 } CSRSS_WRITE_CONSOLE_INPUT_REPLY, *PCSRSS_WRITE_CONSOLE_INPUT_REPLY;
 
+typedef struct
+{
+  HANDLE InputHandle;
+} CSRSS_GET_INPUT_HANDLE_REPLY, *PCSRSS_GET_INPUT_HANDLE_REPLY;
+
+typedef struct
+{
+  HANDLE OutputHandle;
+} CSRSS_GET_OUTPUT_HANDLE_REPLY, *PCSRSS_GET_OUTPUT_HANDLE_REPLY;
+
+typedef struct
+{
+  HANDLE Handle;
+} CSRSS_CLOSE_HANDLE_REQUEST, *PCSRSS_CLOSE_HANDLE_REQUEST;
+
 #define CSRSS_MAX_WRITE_CONSOLE_REQUEST       \
       (MAX_MESSAGE_DATA - sizeof(ULONG) - sizeof(CSRSS_WRITE_CONSOLE_REQUEST))
 
@@ -391,6 +406,9 @@ typedef struct
 #define CSRSS_PEEK_CONSOLE_INPUT            (0x21)
 #define CSRSS_READ_CONSOLE_OUTPUT           (0x22)
 #define CSRSS_WRITE_CONSOLE_INPUT           (0x23)
+#define CSRSS_GET_INPUT_HANDLE             (0x24)
+#define CSRSS_GET_OUTPUT_HANDLE                    (0x25)
+#define CSRSS_CLOSE_HANDLE                 (0x26)
 
 /* Keep in sync with definition below. */
 #define CSRSS_REQUEST_HEADER_SIZE (sizeof(LPC_MESSAGE) + sizeof(ULONG))
@@ -434,6 +452,7 @@ typedef struct
     CSRSS_PEEK_CONSOLE_INPUT_REQUEST PeekConsoleInputRequest;
     CSRSS_READ_CONSOLE_OUTPUT_REQUEST ReadConsoleOutputRequest;
     CSRSS_WRITE_CONSOLE_INPUT_REQUEST WriteConsoleInputRequest;
+    CSRSS_CLOSE_HANDLE_REQUEST CloseHandleRequest;
   } Data;
 } CSRSS_API_REQUEST, *PCSRSS_API_REQUEST;
 
@@ -464,6 +483,8 @@ typedef struct
     CSRSS_PEEK_CONSOLE_INPUT_REPLY PeekConsoleInputReply;
     CSRSS_READ_CONSOLE_OUTPUT_REPLY ReadConsoleOutputReply;
     CSRSS_WRITE_CONSOLE_INPUT_REPLY WriteConsoleInputReply;
+    CSRSS_GET_INPUT_HANDLE_REPLY GetInputHandleReply;
+    CSRSS_GET_OUTPUT_HANDLE_REPLY GetOutputHandleReply;
   } Data;
 } CSRSS_API_REPLY, *PCSRSS_API_REPLY;
 
index c880c22..3eca66e 100644 (file)
@@ -132,6 +132,9 @@ CSR_API(CsrSetShutdownParameters);
 CSR_API(CsrPeekConsoleInput);
 CSR_API(CsrReadConsoleOutput);
 CSR_API(CsrWriteConsoleInput);
+CSR_API(CsrGetInputHandle);
+CSR_API(CsrGetOutputHandle);
+CSR_API(CsrCloseHandle);
 
 /* print.c */
 VOID STDCALL DisplayString(LPCWSTR lpwString);
index 69069ef..abbe32a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: process.c,v 1.23 2003/01/11 15:51:48 hbirr Exp $
+/* $Id: process.c,v 1.24 2003/02/24 23:20:15 hbirr Exp $
  *
  * reactos/subsys/csrss/api/process.c
  *
@@ -279,5 +279,72 @@ CSR_API(CsrSetShutdownParameters)
   return(STATUS_SUCCESS);
 }
 
+CSR_API(CsrGetInputHandle)
+{
+   Reply->Header.MessageSize = sizeof(CSRSS_API_REPLY);
+   Reply->Header.DataSize = sizeof(CSRSS_API_REPLY) - sizeof(LPC_MESSAGE);
+
+   if (ProcessData == NULL)
+   {
+      Reply->Data.GetInputHandleReply.InputHandle = INVALID_HANDLE_VALUE;
+      Reply->Status = STATUS_INVALID_PARAMETER;
+   }
+   else if (ProcessData->Console)
+   {
+      Reply->Status = CsrInsertObject(ProcessData,
+                                     &Reply->Data.GetInputHandleReply.InputHandle,
+                                     (Object_t *)ProcessData->Console);
+   }
+   else
+   {
+      Reply->Data.GetInputHandleReply.InputHandle = INVALID_HANDLE_VALUE;
+      Reply->Status = STATUS_SUCCESS;
+   }
+
+   return Reply->Status;
+}
 
+CSR_API(CsrGetOutputHandle)
+{
+   Reply->Header.MessageSize = sizeof(CSRSS_API_REPLY);
+   Reply->Header.DataSize = sizeof(CSRSS_API_REPLY) - sizeof(LPC_MESSAGE);
+
+   if (ProcessData == NULL)
+   {
+      Reply->Data.GetOutputHandleReply.OutputHandle = INVALID_HANDLE_VALUE;
+      Reply->Status = STATUS_INVALID_PARAMETER;
+   }
+   else if (ProcessData->Console)
+   {
+      RtlEnterCriticalSection( &ActiveConsoleLock );
+      Reply->Status = CsrInsertObject(ProcessData,
+                                      &Reply->Data.GetOutputHandleReply.OutputHandle,
+                                      &(ProcessData->Console->ActiveBuffer->Header));
+      RtlLeaveCriticalSection( &ActiveConsoleLock );
+   }
+   else
+   {
+      Reply->Data.GetOutputHandleReply.OutputHandle = INVALID_HANDLE_VALUE;
+      Reply->Status = STATUS_SUCCESS;
+   }
+
+   return Reply->Status;
+}
+
+CSR_API(CsrCloseHandle)
+{
+   Reply->Header.MessageSize = sizeof(CSRSS_API_REPLY);
+   Reply->Header.DataSize = sizeof(CSRSS_API_REPLY) - sizeof(LPC_MESSAGE);
+
+   if (ProcessData == NULL)
+   {
+      Reply->Status = STATUS_INVALID_PARAMETER;
+   }
+   else
+   {
+      Reply->Status = CsrReleaseObject(ProcessData, Request->Data.CloseHandleRequest.Handle);
+   }
+   return Reply->Status;
+}
+   
 /* EOF */
index f32dae9..89b555f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: wapi.c,v 1.25 2002/11/12 00:48:26 mdill Exp $
+/* $Id: wapi.c,v 1.26 2003/02/24 23:20:15 hbirr Exp $
  * 
  * reactos/subsys/csrss/api/wapi.c
  *
@@ -63,6 +63,9 @@ static const CsrFunc CsrFuncs[] = {
    CsrPeekConsoleInput,
    CsrReadConsoleOutput,
    CsrWriteConsoleInput,
+   CsrGetInputHandle,
+   CsrGetOutputHandle,
+   CsrCloseHandle,
    0 };
 
 static void Thread_Api2(HANDLE ServerPort)