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;
+
+typedef struct
+{
+ HANDLE Handle;
+} CSRSS_VERIFY_HANDLE_REQUEST, *PCSRSS_VERIFY_HANDLE_REQUEST;
+
+typedef struct
+{
+ HANDLE Handle;
+ DWORD ProcessId;
+} CSRSS_DUPLICATE_HANDLE_REQUEST, *PCSRSS_DUPLICATE_HANDLE_REQUEST;
+
+typedef struct
+{
+ HANDLE Handle;
+} CSRSS_DUPLICATE_HANDLE_REPLY, *PCSRSS_DUPLICATE_HANDLE_REPLY;
+
#define CSRSS_MAX_WRITE_CONSOLE_REQUEST \
(MAX_MESSAGE_DATA - sizeof(ULONG) - sizeof(CSRSS_WRITE_CONSOLE_REQUEST))
#define CSRSS_MAX_READ_CONSOLE_OUTPUT_ATTRIB (MAX_MESSAGE_DATA - sizeof(ULONG) - sizeof(HANDLE) - sizeof(DWORD) - sizeof(CSRSS_READ_CONSOLE_OUTPUT_ATTRIB_REQUEST))
-// FIXME: it should be 80. Is this a limit due to LPC msg size?
-#define CSRSS_MAX_TITLE_LENGTH 50
+// WCHARs, not bytes!
+#define CSRSS_MAX_TITLE_LENGTH 80
#define CSRSS_CREATE_PROCESS (0x0)
#define CSRSS_TERMINATE_PROCESS (0x1)
#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)
+#define CSRSS_VERIFY_HANDLE (0x27)
+#define CSRSS_DUPLICATE_HANDLE (0x28)
/* 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;
+ CSRSS_VERIFY_HANDLE_REQUEST VerifyHandleRequest;
+ CSRSS_DUPLICATE_HANDLE_REQUEST DuplicateHandleRequest;
} 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;
+ CSRSS_DUPLICATE_HANDLE_REPLY DuplicateHandleReply;
} Data;
} CSRSS_API_REPLY, *PCSRSS_API_REPLY;