[CONSRV]
[reactos.git] / win32ss / user / consrv / init.c
index 4472e66..82233cd 100644 (file)
@@ -7,11 +7,12 @@
  */
 
 #include "consrv.h"
+#include "conio.h"
 
 #define NDEBUG
 #include <debug.h>
 
-HANDLE DllHandle = NULL;
+HINSTANCE ConSrvDllInstance = NULL;
 // HANDLE BaseApiPort = NULL;
 
 /* Memory */
@@ -24,14 +25,14 @@ HANDLE ConSrvHeap = NULL;          // Our own heap.
 // Some names are also deduced from the subsystems/win32/csrss/csrsrv/server.c ones.
 PCSR_API_ROUTINE ConsoleServerApiDispatchTable[ConsolepMaxApiNumber] =
 {
-    // SrvOpenConsole,
+    SrvOpenConsole,
     SrvGetConsoleInput,
     SrvWriteConsoleInput,
     SrvReadConsoleOutput,
     SrvWriteConsoleOutput,
-    // SrvReadConsoleOutputString,
-    // SrvWriteConsoleOutputString,
-    // SrvFillConsoleOutput,
+    SrvReadConsoleOutputString,
+    SrvWriteConsoleOutputString,
+    SrvFillConsoleOutput,
     SrvGetConsoleMode,
     // SrvGetConsoleNumberOfFonts,
     SrvGetConsoleNumberOfInputEvents,
@@ -46,11 +47,11 @@ PCSR_API_ROUTINE ConsoleServerApiDispatchTable[ConsolepMaxApiNumber] =
     SrvFlushConsoleInputBuffer,
     // SrvGetLargestConsoleWindowSize,
     SrvSetConsoleScreenBufferSize,
-    // SrvSetConsoleCursorPosition,
+    SrvSetConsoleCursorPosition,
     SrvSetConsoleCursorInfo,
     // SrvSetConsoleWindowInfo,
     SrvScrollConsoleScreenBuffer,
-    // SrvSetConsoleTextAttribute,
+    SrvSetConsoleTextAttribute,
     // SrvSetConsoleFont,
     SrvSetConsoleIcon,
     SrvReadConsole,
@@ -67,7 +68,7 @@ PCSR_API_ROUTINE ConsoleServerApiDispatchTable[ConsolepMaxApiNumber] =
     SrvCreateConsoleScreenBuffer,
     // SrvInvalidateBitMapRect,
     // SrvVDMConsoleOperation,
-    SrvSetConsoleCursor,
+    // SrvSetConsoleCursor,
     // SrvShowConsoleCursor,
     // SrvConsoleMenuControl,
     // SrvSetConsolePalette,
@@ -115,14 +116,14 @@ PCSR_API_ROUTINE ConsoleServerApiDispatchTable[ConsolepMaxApiNumber] =
 
 BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber] =
 {
-    // FALSE,   // SrvOpenConsole,
+    FALSE,   // SrvOpenConsole,
     FALSE,   // SrvGetConsoleInput,
     FALSE,   // SrvWriteConsoleInput,
     FALSE,   // SrvReadConsoleOutput,
     FALSE,   // SrvWriteConsoleOutput,
-    // FALSE,   // SrvReadConsoleOutputString,
-    // FALSE,   // SrvWriteConsoleOutputString,
-    // FALSE,   // SrvFillConsoleOutput,
+    FALSE,   // SrvReadConsoleOutputString,
+    FALSE,   // SrvWriteConsoleOutputString,
+    FALSE,   // SrvFillConsoleOutput,
     FALSE,   // SrvGetConsoleMode,
     // FALSE,   // SrvGetConsoleNumberOfFonts,
     FALSE,   // SrvGetConsoleNumberOfInputEvents,
@@ -137,11 +138,11 @@ BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber] =
     FALSE,   // SrvFlushConsoleInputBuffer,
     // FALSE,   // SrvGetLargestConsoleWindowSize,
     FALSE,   // SrvSetConsoleScreenBufferSize,
-    // FALSE,   // SrvSetConsoleCursorPosition,
+    FALSE,   // SrvSetConsoleCursorPosition,
     FALSE,   // SrvSetConsoleCursorInfo,
     // FALSE,   // SrvSetConsoleWindowInfo,
     FALSE,   // SrvScrollConsoleScreenBuffer,
-    // FALSE,   // SrvSetConsoleTextAttribute,
+    FALSE,   // SrvSetConsoleTextAttribute,
     // FALSE,   // SrvSetConsoleFont,
     FALSE,   // SrvSetConsoleIcon,
     FALSE,   // SrvReadConsole,
@@ -158,7 +159,7 @@ BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber] =
     FALSE,   // SrvCreateConsoleScreenBuffer,
     // FALSE,   // SrvInvalidateBitMapRect,
     // FALSE,   // SrvVDMConsoleOperation,
-    FALSE,   // SrvSetConsoleCursor,
+    // FALSE,   // SrvSetConsoleCursor,
     // FALSE,   // SrvShowConsoleCursor,
     // FALSE,   // SrvConsoleMenuControl,
     // FALSE,   // SrvSetConsolePalette,
@@ -208,14 +209,14 @@ BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber] =
 
 PCHAR ConsoleServerApiNameTable[ConsolepMaxApiNumber] =
 {
-    // "OpenConsole",
+    "OpenConsole",
     "GetConsoleInput",
     "WriteConsoleInput",
     "ReadConsoleOutput",
     "WriteConsoleOutput",
-    // "ReadConsoleOutputString",
-    // "WriteConsoleOutputString",
-    // "FillConsoleOutput",
+    "ReadConsoleOutputString",
+    "WriteConsoleOutputString",
+    "FillConsoleOutput",
     "GetConsoleMode",
     // "GetConsoleNumberOfFonts",
     "GetConsoleNumberOfInputEvents",
@@ -230,11 +231,11 @@ PCHAR ConsoleServerApiNameTable[ConsolepMaxApiNumber] =
     "FlushConsoleInputBuffer",
     // "GetLargestConsoleWindowSize",
     "SetConsoleScreenBufferSize",
-    // "SetConsoleCursorPosition",
+    "SetConsoleCursorPosition",
     "SetConsoleCursorInfo",
     // "SetConsoleWindowInfo",
     "ScrollConsoleScreenBuffer",
-    // "SetConsoleTextAttribute",
+    "SetConsoleTextAttribute",
     // "SetConsoleFont",
     "SetConsoleIcon",
     "ReadConsole",
@@ -251,7 +252,7 @@ PCHAR ConsoleServerApiNameTable[ConsolepMaxApiNumber] =
     "CreateConsoleScreenBuffer",
     // "InvalidateBitMapRect",
     // "VDMConsoleOperation",
-    "SetConsoleCursor",
+    // "SetConsoleCursor",
     // "ShowConsoleCursor",
     // "ConsoleMenuControl",
     // "SetConsolePalette",
@@ -300,6 +301,106 @@ PCHAR ConsoleServerApiNameTable[ConsolepMaxApiNumber] =
 };
 
 
+/*
+PCSR_API_ROUTINE Win32CsrApiDefinitions[] =
+{
+    CsrGetHandle,
+    CsrGetHandle,
+    CsrCloseHandle,
+    CsrVerifyHandle,
+    CsrDuplicateHandle,
+    CsrGetInputWaitHandle,
+    CsrFillOutputChar,
+    CsrReadInputEvent,
+    CsrWriteConsoleOutputChar,
+    CsrWriteConsoleOutputAttrib,
+    CsrFillOutputAttrib,
+    CsrSetTextAttrib,
+    CsrWriteConsoleOutput,
+    CsrFlushInputBuffer,
+    CsrReadConsoleOutputChar,
+    CsrReadConsoleOutputAttrib,
+    CsrExitReactos,
+    CsrHardwareStateProperty,
+    CsrCreateDesktop,
+    CsrShowDesktop,
+    CsrHideDesktop,
+    CsrSetLogonNotifyWindow,
+    CsrRegisterLogonProcess,
+    CsrGenerateCtrlEvent,
+};
+
+static CSRSS_API_DEFINITION Win32CsrApiDefinitions[] =
+{
+    CSRSS_DEFINE_API(GET_INPUT_HANDLE,             CsrGetHandle),
+    CSRSS_DEFINE_API(GET_OUTPUT_HANDLE,            CsrGetHandle),
+    CSRSS_DEFINE_API(CLOSE_HANDLE,                 CsrCloseHandle),
+    CSRSS_DEFINE_API(VERIFY_HANDLE,                CsrVerifyHandle),
+    CSRSS_DEFINE_API(DUPLICATE_HANDLE,             CsrDuplicateHandle),
+    CSRSS_DEFINE_API(GET_INPUT_WAIT_HANDLE,        CsrGetInputWaitHandle),
+    CSRSS_DEFINE_API(WRITE_CONSOLE,                CsrWriteConsole),
+    CSRSS_DEFINE_API(READ_CONSOLE,                 CsrReadConsole),
+    CSRSS_DEFINE_API(ALLOC_CONSOLE,                CsrAllocConsole),
+    CSRSS_DEFINE_API(FREE_CONSOLE,                 CsrFreeConsole),
+    CSRSS_DEFINE_API(SCREEN_BUFFER_INFO,           CsrGetScreenBufferInfo),
+    CSRSS_DEFINE_API(SET_CURSOR,                   CsrSetCursor),
+    CSRSS_DEFINE_API(FILL_OUTPUT,                  CsrFillOutputChar),
+    CSRSS_DEFINE_API(READ_INPUT,                   CsrReadInputEvent),
+    CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT_CHAR,    CsrWriteConsoleOutputChar),
+    CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT_ATTRIB,  CsrWriteConsoleOutputAttrib),
+    CSRSS_DEFINE_API(FILL_OUTPUT_ATTRIB,           CsrFillOutputAttrib),
+    CSRSS_DEFINE_API(GET_CURSOR_INFO,              CsrGetCursorInfo),
+    CSRSS_DEFINE_API(SET_CURSOR_INFO,              CsrSetCursorInfo),
+    CSRSS_DEFINE_API(SET_ATTRIB,                   CsrSetTextAttrib),
+    CSRSS_DEFINE_API(GET_CONSOLE_MODE,             CsrGetConsoleMode),
+    CSRSS_DEFINE_API(SET_CONSOLE_MODE,             CsrSetConsoleMode),
+    CSRSS_DEFINE_API(CREATE_SCREEN_BUFFER,         CsrCreateScreenBuffer),
+    CSRSS_DEFINE_API(SET_SCREEN_BUFFER,            CsrSetScreenBuffer),
+    CSRSS_DEFINE_API(SET_TITLE,                    CsrSetTitle),
+    CSRSS_DEFINE_API(GET_TITLE,                    CsrGetTitle),
+    CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT,         CsrWriteConsoleOutput),
+    CSRSS_DEFINE_API(FLUSH_INPUT_BUFFER,           CsrFlushInputBuffer),
+    CSRSS_DEFINE_API(SCROLL_CONSOLE_SCREEN_BUFFER, CsrScrollConsoleScreenBuffer),
+    CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT_CHAR,     CsrReadConsoleOutputChar),
+    CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT_ATTRIB,   CsrReadConsoleOutputAttrib),
+    CSRSS_DEFINE_API(GET_NUM_INPUT_EVENTS,         CsrGetNumberOfConsoleInputEvents),
+    CSRSS_DEFINE_API(EXIT_REACTOS,                 CsrExitReactos),
+    CSRSS_DEFINE_API(PEEK_CONSOLE_INPUT,           CsrPeekConsoleInput),
+    CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT,          CsrReadConsoleOutput),
+    CSRSS_DEFINE_API(WRITE_CONSOLE_INPUT,          CsrWriteConsoleInput),
+    CSRSS_DEFINE_API(SETGET_CONSOLE_HW_STATE,      CsrHardwareStateProperty),
+    CSRSS_DEFINE_API(GET_CONSOLE_WINDOW,           CsrGetConsoleWindow),
+    CSRSS_DEFINE_API(CREATE_DESKTOP,               CsrCreateDesktop),
+    CSRSS_DEFINE_API(SHOW_DESKTOP,                 CsrShowDesktop),
+    CSRSS_DEFINE_API(HIDE_DESKTOP,                 CsrHideDesktop),
+    CSRSS_DEFINE_API(SET_CONSOLE_ICON,             CsrSetConsoleIcon),
+    CSRSS_DEFINE_API(SET_LOGON_NOTIFY_WINDOW,      CsrSetLogonNotifyWindow),
+    CSRSS_DEFINE_API(REGISTER_LOGON_PROCESS,       CsrRegisterLogonProcess),
+    CSRSS_DEFINE_API(GET_CONSOLE_CP,               CsrGetConsoleCodePage),
+    CSRSS_DEFINE_API(SET_CONSOLE_CP,               CsrSetConsoleCodePage),
+    CSRSS_DEFINE_API(GET_CONSOLE_OUTPUT_CP,        CsrGetConsoleOutputCodePage),
+    CSRSS_DEFINE_API(SET_CONSOLE_OUTPUT_CP,        CsrSetConsoleOutputCodePage),
+    CSRSS_DEFINE_API(GET_PROCESS_LIST,             CsrGetProcessList),
+    CSRSS_DEFINE_API(ADD_CONSOLE_ALIAS,      CsrAddConsoleAlias),
+    CSRSS_DEFINE_API(GET_CONSOLE_ALIAS,      CsrGetConsoleAlias),
+    CSRSS_DEFINE_API(GET_ALL_CONSOLE_ALIASES,         CsrGetAllConsoleAliases),
+    CSRSS_DEFINE_API(GET_ALL_CONSOLE_ALIASES_LENGTH,  CsrGetAllConsoleAliasesLength),
+    CSRSS_DEFINE_API(GET_CONSOLE_ALIASES_EXES,        CsrGetConsoleAliasesExes),
+    CSRSS_DEFINE_API(GET_CONSOLE_ALIASES_EXES_LENGTH, CsrGetConsoleAliasesExesLength),
+    CSRSS_DEFINE_API(GENERATE_CTRL_EVENT,          CsrGenerateCtrlEvent),
+    CSRSS_DEFINE_API(SET_SCREEN_BUFFER_SIZE,       CsrSetScreenBufferSize),
+    CSRSS_DEFINE_API(GET_CONSOLE_SELECTION_INFO,   CsrGetConsoleSelectionInfo),
+    CSRSS_DEFINE_API(GET_COMMAND_HISTORY_LENGTH,   CsrGetCommandHistoryLength),
+    CSRSS_DEFINE_API(GET_COMMAND_HISTORY,          CsrGetCommandHistory),
+    CSRSS_DEFINE_API(EXPUNGE_COMMAND_HISTORY,      CsrExpungeCommandHistory),
+    CSRSS_DEFINE_API(SET_HISTORY_NUMBER_COMMANDS,  CsrSetHistoryNumberCommands),
+    CSRSS_DEFINE_API(GET_HISTORY_INFO,             CsrGetHistoryInfo),
+    CSRSS_DEFINE_API(SET_HISTORY_INFO,             CsrSetHistoryInfo),
+    { 0, 0, NULL }
+};
+*/
+
+
 /* FUNCTIONS ******************************************************************/
 
 /*
@@ -327,12 +428,16 @@ VOID WINAPI ConsoleStaticServerThread(PVOID x)
 
 CSR_SERVER_DLL_INIT(ConServerDllInitialization)
 {
-    // NTSTATUS Status = STATUS_SUCCESS;
-
 /*
+    NTSTATUS Status = STATUS_SUCCESS;
+
     DPRINT("BASSRV: %s(%ld,...) called\n", __FUNCTION__, ArgumentCount);
 
-    BaseApiPort = CsrQueryApiPort ();
+    // Get the listening port from csrsrv.dll
+    BaseApiPort = CsrQueryApiPort();
+    if (BaseApiPort == NULL) return STATUS_UNSUCCESSFUL;
+
+    // Register our message dispatcher
     Status = CsrAddStaticServerThread(ConsoleStaticServerThread);
     if (NT_SUCCESS(Status))
     {
@@ -354,10 +459,10 @@ CSR_SERVER_DLL_INIT(ConServerDllInitialization)
     LoadedServerDll->DispatchTable = ConsoleServerApiDispatchTable;
     LoadedServerDll->ValidTable = ConsoleServerApiServerValidTable;
     LoadedServerDll->NameTable = ConsoleServerApiNameTable;
-    LoadedServerDll->SizeOfProcessData = 0;
-    LoadedServerDll->ConnectCallback = NULL;
-    LoadedServerDll->DisconnectCallback = Win32CsrReleaseConsole;
-    LoadedServerDll->NewProcessCallback = Win32CsrDuplicateHandleTable;
+    LoadedServerDll->SizeOfProcessData = sizeof(CONSOLE_PROCESS_DATA);
+    LoadedServerDll->ConnectCallback = ConsoleConnect;
+    LoadedServerDll->DisconnectCallback = ConsoleDisconnect;
+    LoadedServerDll->NewProcessCallback = ConsoleNewProcess;
     // LoadedServerDll->HardErrorCallback = Win32CsrHardError;
 
     /* All done */
@@ -365,8 +470,8 @@ CSR_SERVER_DLL_INIT(ConServerDllInitialization)
 }
 
 BOOL
-NTAPI
-DllMain(IN HANDLE hDll,
+WINAPI
+DllMain(IN HINSTANCE hInstanceDll,
         IN DWORD dwReason,
         IN LPVOID lpReserved)
 {
@@ -375,7 +480,7 @@ DllMain(IN HANDLE hDll,
 
     if (DLL_PROCESS_ATTACH == dwReason)
     {
-        DllHandle = hDll;
+        ConSrvDllInstance = hInstanceDll;
     }
 
     return TRUE;