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))
#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))
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;
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;
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);
-/* $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
*
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 */
-/* $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
*
CsrPeekConsoleInput,
CsrReadConsoleOutput,
CsrWriteConsoleInput,
+ CsrGetInputHandle,
+ CsrGetOutputHandle,
+ CsrCloseHandle,
0 };
static void Thread_Api2(HANDLE ServerPort)