[CSR]
[reactos.git] / reactos / win32ss / user / winsrv / consrv / init.c
index a1ba235..a8365f5 100644 (file)
@@ -26,7 +26,6 @@ HINSTANCE ConSrvDllInstance = NULL;
 HANDLE ConSrvHeap = NULL;   // Our own heap.
 
 // Windows Server 2003 table from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_2k3
-// plus a little bit of Windows 7.
 PCSR_API_ROUTINE ConsoleServerApiDispatchTable[ConsolepMaxApiNumber - CONSRV_FIRST_API_NUMBER] =
 {
     SrvOpenConsole,
@@ -38,14 +37,14 @@ PCSR_API_ROUTINE ConsoleServerApiDispatchTable[ConsolepMaxApiNumber - CONSRV_FIR
     SrvWriteConsoleOutputString,
     SrvFillConsoleOutput,
     SrvGetConsoleMode,
-    // SrvGetConsoleNumberOfFonts,
+    SrvGetConsoleNumberOfFonts,
     SrvGetConsoleNumberOfInputEvents,
     SrvGetConsoleScreenBufferInfo,
     SrvGetConsoleCursorInfo,
-    // SrvGetConsoleMouseInfo,
-    // SrvGetConsoleFontInfo,
-    // SrvGetConsoleFontSize,
-    // SrvGetConsoleCurrentFont,
+    SrvGetConsoleMouseInfo,
+    SrvGetConsoleFontInfo,
+    SrvGetConsoleFontSize,
+    SrvGetConsoleCurrentFont,
     SrvSetConsoleMode,
     SrvSetConsoleActiveScreenBuffer,
     SrvFlushConsoleInputBuffer,
@@ -56,28 +55,28 @@ PCSR_API_ROUTINE ConsoleServerApiDispatchTable[ConsolepMaxApiNumber - CONSRV_FIR
     SrvSetConsoleWindowInfo,
     SrvScrollConsoleScreenBuffer,
     SrvSetConsoleTextAttribute,
-    // SrvSetConsoleFont,
+    SrvSetConsoleFont,
     SrvSetConsoleIcon,
     SrvReadConsole,
     SrvWriteConsole,
     SrvDuplicateHandle,
-    // SrvGetHandleInformation,
-    // SrvSetHandleInformation,
+    SrvGetHandleInformation,
+    SrvSetHandleInformation,
     SrvCloseHandle,
     SrvVerifyConsoleIoHandle,
-    SrvAllocConsole,
-    SrvFreeConsole,
+    SrvAllocConsole,                        // Not present in Win7
+    SrvFreeConsole,                         // Not present in Win7
     SrvGetConsoleTitle,
     SrvSetConsoleTitle,
     SrvCreateConsoleScreenBuffer,
     SrvInvalidateBitMapRect,
-    // SrvVDMConsoleOperation,
+    SrvVDMConsoleOperation,
     SrvSetConsoleCursor,
     SrvShowConsoleCursor,
     SrvConsoleMenuControl,
     SrvSetConsolePalette,
     SrvSetConsoleDisplayMode,
-    // SrvRegisterConsoleVDM,
+    SrvRegisterConsoleVDM,
     SrvGetConsoleHardwareState,
     SrvSetConsoleHardwareState,
     SrvGetConsoleDisplayMode,
@@ -91,31 +90,36 @@ PCSR_API_ROUTINE ConsoleServerApiDispatchTable[ConsolepMaxApiNumber - CONSRV_FIR
     SrvSetConsoleNumberOfCommands,
     SrvGetConsoleCommandHistoryLength,
     SrvGetConsoleCommandHistory,
-    // SrvSetConsoleCommandHistoryMode,
+    SrvSetConsoleCommandHistoryMode,     // Not present in Vista+
     SrvGetConsoleCP,
     SrvSetConsoleCP,
-    // SrvSetConsoleKeyShortcuts,
+    SrvSetConsoleKeyShortcuts,
     SrvSetConsoleMenuClose,
-    // SrvConsoleNotifyLastClose,
+    SrvConsoleNotifyLastClose,
     SrvGenerateConsoleCtrlEvent,
-    // SrvGetConsoleKeyboardLayoutName,
+    SrvGetConsoleKeyboardLayoutName,
     SrvGetConsoleWindow,
-    // SrvGetConsoleCharType,
-    // SrvSetConsoleLocalEUDC,
-    // SrvSetConsoleCursorMode,
-    // SrvGetConsoleCursorMode,
-    // SrvRegisterConsoleOS2,
-    // SrvSetConsoleOS2OemFormat,
-    // SrvGetConsoleNlsMode,
-    // SrvSetConsoleNlsMode,
-    // SrvRegisterConsoleIME,
-    // SrvUnregisterConsoleIME,
-    // SrvGetConsoleLangId,
-    SrvAttachConsole,
+    SrvGetConsoleCharType,
+    SrvSetConsoleLocalEUDC,
+    SrvSetConsoleCursorMode,
+    SrvGetConsoleCursorMode,
+    SrvRegisterConsoleOS2,
+    SrvSetConsoleOS2OemFormat,
+    SrvGetConsoleNlsMode,
+    SrvSetConsoleNlsMode,
+    SrvRegisterConsoleIME,                  // Not present in Win7
+    SrvUnregisterConsoleIME,                // Not present in Win7
+    // SrvQueryConsoleIME,                     // Added only in Vista and Win2k8, not present in Win7
+    SrvGetConsoleLangId,
+    SrvAttachConsole,                       // Not present in Win7
     SrvGetConsoleSelectionInfo,
     SrvGetConsoleProcessList,
-    SrvGetConsoleHistory,
-    SrvSetConsoleHistory,
+
+    SrvGetConsoleHistory,                   // Added in Vista+
+    SrvSetConsoleHistory,                   // Added in Vista+
+    // SrvSetConsoleCurrentFont,               // Added in Vista+
+    // SrvSetScreenBufferInfo,                 // Added in Vista+
+    // SrvConsoleClientConnect,                // Added in Win7
 };
 
 BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber - CONSRV_FIRST_API_NUMBER] =
@@ -129,14 +133,14 @@ BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber - CONSRV_FIRST_API
     FALSE,   // SrvWriteConsoleOutputString,
     FALSE,   // SrvFillConsoleOutput,
     FALSE,   // SrvGetConsoleMode,
-    // FALSE,   // SrvGetConsoleNumberOfFonts,
+    FALSE,   // SrvGetConsoleNumberOfFonts,
     FALSE,   // SrvGetConsoleNumberOfInputEvents,
     FALSE,   // SrvGetConsoleScreenBufferInfo,
     FALSE,   // SrvGetConsoleCursorInfo,
-    // FALSE,   // SrvGetConsoleMouseInfo,
-    // FALSE,   // SrvGetConsoleFontInfo,
-    // FALSE,   // SrvGetConsoleFontSize,
-    // FALSE,   // SrvGetConsoleCurrentFont,
+    FALSE,   // SrvGetConsoleMouseInfo,
+    FALSE,   // SrvGetConsoleFontInfo,
+    FALSE,   // SrvGetConsoleFontSize,
+    FALSE,   // SrvGetConsoleCurrentFont,
     FALSE,   // SrvSetConsoleMode,
     FALSE,   // SrvSetConsoleActiveScreenBuffer,
     FALSE,   // SrvFlushConsoleInputBuffer,
@@ -147,13 +151,13 @@ BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber - CONSRV_FIRST_API
     FALSE,   // SrvSetConsoleWindowInfo,
     FALSE,   // SrvScrollConsoleScreenBuffer,
     FALSE,   // SrvSetConsoleTextAttribute,
-    // FALSE,   // SrvSetConsoleFont,
+    FALSE,   // SrvSetConsoleFont,
     FALSE,   // SrvSetConsoleIcon,
     FALSE,   // SrvReadConsole,
     FALSE,   // SrvWriteConsole,
     FALSE,   // SrvDuplicateHandle,
-    // FALSE,   // SrvGetHandleInformation,
-    // FALSE,   // SrvSetHandleInformation,
+    FALSE,   // SrvGetHandleInformation,
+    FALSE,   // SrvSetHandleInformation,
     FALSE,   // SrvCloseHandle,
     FALSE,   // SrvVerifyConsoleIoHandle,
     FALSE,   // SrvAllocConsole,
@@ -162,13 +166,13 @@ BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber - CONSRV_FIRST_API
     FALSE,   // SrvSetConsoleTitle,
     FALSE,   // SrvCreateConsoleScreenBuffer,
     FALSE,   // SrvInvalidateBitMapRect,
-    // FALSE,   // SrvVDMConsoleOperation,
+    FALSE,   // SrvVDMConsoleOperation,
     FALSE,   // SrvSetConsoleCursor,
     FALSE,   // SrvShowConsoleCursor,
     FALSE,   // SrvConsoleMenuControl,
     FALSE,   // SrvSetConsolePalette,
     FALSE,   // SrvSetConsoleDisplayMode,
-    // FALSE,   // SrvRegisterConsoleVDM,
+    FALSE,   // SrvRegisterConsoleVDM,
     FALSE,   // SrvGetConsoleHardwareState,
     FALSE,   // SrvSetConsoleHardwareState,
     TRUE,    // SrvGetConsoleDisplayMode,
@@ -182,33 +186,43 @@ BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber - CONSRV_FIRST_API
     FALSE,   // SrvSetConsoleNumberOfCommands,
     FALSE,   // SrvGetConsoleCommandHistoryLength,
     FALSE,   // SrvGetConsoleCommandHistory,
-    // FALSE,   // SrvSetConsoleCommandHistoryMode,
+    FALSE,   // SrvSetConsoleCommandHistoryMode,
     FALSE,   // SrvGetConsoleCP,
     FALSE,   // SrvSetConsoleCP,
-    // FALSE,   // SrvSetConsoleKeyShortcuts,
+    FALSE,   // SrvSetConsoleKeyShortcuts,
     FALSE,   // SrvSetConsoleMenuClose,
-    // FALSE,   // SrvConsoleNotifyLastClose,
+    FALSE,   // SrvConsoleNotifyLastClose,
     FALSE,   // SrvGenerateConsoleCtrlEvent,
-    // FALSE,   // SrvGetConsoleKeyboardLayoutName,
+    FALSE,   // SrvGetConsoleKeyboardLayoutName,
     FALSE,   // SrvGetConsoleWindow,
-    // FALSE,   // SrvGetConsoleCharType,
-    // FALSE,   // SrvSetConsoleLocalEUDC,
-    // FALSE,   // SrvSetConsoleCursorMode,
-    // FALSE,   // SrvGetConsoleCursorMode,
-    // FALSE,   // SrvRegisterConsoleOS2,
-    // FALSE,   // SrvSetConsoleOS2OemFormat,
-    // FALSE,   // SrvGetConsoleNlsMode,
-    // FALSE,   // SrvSetConsoleNlsMode,
-    // FALSE,   // SrvRegisterConsoleIME,
-    // FALSE,   // SrvUnregisterConsoleIME,
-    // FALSE,   // SrvGetConsoleLangId,
+    FALSE,   // SrvGetConsoleCharType,
+    FALSE,   // SrvSetConsoleLocalEUDC,
+    FALSE,   // SrvSetConsoleCursorMode,
+    FALSE,   // SrvGetConsoleCursorMode,
+    FALSE,   // SrvRegisterConsoleOS2,
+    FALSE,   // SrvSetConsoleOS2OemFormat,
+    FALSE,   // SrvGetConsoleNlsMode,
+    FALSE,   // SrvSetConsoleNlsMode,
+    FALSE,   // SrvRegisterConsoleIME,
+    FALSE,   // SrvUnregisterConsoleIME,
+    // FALSE,   // SrvQueryConsoleIME,
+    FALSE,   // SrvGetConsoleLangId,
     FALSE,   // SrvAttachConsole,
     FALSE,   // SrvGetConsoleSelectionInfo,
     FALSE,   // SrvGetConsoleProcessList,
+
     FALSE,   // SrvGetConsoleHistory,
     FALSE,   // SrvSetConsoleHistory
+    // FALSE,   // SrvSetConsoleCurrentFont,
+    // FALSE,   // SrvSetScreenBufferInfo,
+    // FALSE,   // SrvConsoleClientConnect,
 };
 
+/*
+ * On Windows Server 2003, CSR Servers contain
+ * the API Names Table only in Debug Builds.
+ */
+#ifdef CSR_DBG
 PCHAR ConsoleServerApiNameTable[ConsolepMaxApiNumber - CONSRV_FIRST_API_NUMBER] =
 {
     "OpenConsole",
@@ -220,14 +234,14 @@ PCHAR ConsoleServerApiNameTable[ConsolepMaxApiNumber - CONSRV_FIRST_API_NUMBER]
     "WriteConsoleOutputString",
     "FillConsoleOutput",
     "GetConsoleMode",
-    // "GetConsoleNumberOfFonts",
+    "GetConsoleNumberOfFonts",
     "GetConsoleNumberOfInputEvents",
     "GetConsoleScreenBufferInfo",
     "GetConsoleCursorInfo",
-    // "GetConsoleMouseInfo",
-    // "GetConsoleFontInfo",
-    // "GetConsoleFontSize",
-    // "GetConsoleCurrentFont",
+    "GetConsoleMouseInfo",
+    "GetConsoleFontInfo",
+    "GetConsoleFontSize",
+    "GetConsoleCurrentFont",
     "SetConsoleMode",
     "SetConsoleActiveScreenBuffer",
     "FlushConsoleInputBuffer",
@@ -238,13 +252,13 @@ PCHAR ConsoleServerApiNameTable[ConsolepMaxApiNumber - CONSRV_FIRST_API_NUMBER]
     "SetConsoleWindowInfo",
     "ScrollConsoleScreenBuffer",
     "SetConsoleTextAttribute",
-    // "SetConsoleFont",
+    "SetConsoleFont",
     "SetConsoleIcon",
     "ReadConsole",
     "WriteConsole",
     "DuplicateHandle",
-    // "GetHandleInformation",
-    // "SetHandleInformation",
+    "GetHandleInformation",
+    "SetHandleInformation",
     "CloseHandle",
     "VerifyConsoleIoHandle",
     "AllocConsole",
@@ -253,13 +267,13 @@ PCHAR ConsoleServerApiNameTable[ConsolepMaxApiNumber - CONSRV_FIRST_API_NUMBER]
     "SetConsoleTitle",
     "CreateConsoleScreenBuffer",
     "InvalidateBitMapRect",
-    // "VDMConsoleOperation",
+    "VDMConsoleOperation",
     "SetConsoleCursor",
     "ShowConsoleCursor",
     "ConsoleMenuControl",
     "SetConsolePalette",
     "SetConsoleDisplayMode",
-    // "RegisterConsoleVDM",
+    "RegisterConsoleVDM",
     "GetConsoleHardwareState",
     "SetConsoleHardwareState",
     "GetConsoleDisplayMode",
@@ -273,33 +287,38 @@ PCHAR ConsoleServerApiNameTable[ConsolepMaxApiNumber - CONSRV_FIRST_API_NUMBER]
     "SetConsoleNumberOfCommands",
     "GetConsoleCommandHistoryLength",
     "GetConsoleCommandHistory",
-    // "SetConsoleCommandHistoryMode",
+    "SetConsoleCommandHistoryMode",
     "GetConsoleCP",
     "SetConsoleCP",
-    // "SetConsoleKeyShortcuts",
+    "SetConsoleKeyShortcuts",
     "SetConsoleMenuClose",
-    // "ConsoleNotifyLastClose",
+    "ConsoleNotifyLastClose",
     "GenerateConsoleCtrlEvent",
-    // "GetConsoleKeyboardLayoutName",
+    "GetConsoleKeyboardLayoutName",
     "GetConsoleWindow",
-    // "GetConsoleCharType",
-    // "SetConsoleLocalEUDC",
-    // "SetConsoleCursorMode",
-    // "GetConsoleCursorMode",
-    // "RegisterConsoleOS2",
-    // "SetConsoleOS2OemFormat",
-    // "GetConsoleNlsMode",
-    // "SetConsoleNlsMode",
-    // "RegisterConsoleIME",
-    // "UnregisterConsoleIME",
-    // "GetConsoleLangId",
+    "GetConsoleCharType",
+    "SetConsoleLocalEUDC",
+    "SetConsoleCursorMode",
+    "GetConsoleCursorMode",
+    "RegisterConsoleOS2",
+    "SetConsoleOS2OemFormat",
+    "GetConsoleNlsMode",
+    "SetConsoleNlsMode",
+    "RegisterConsoleIME",
+    "UnregisterConsoleIME",
+    // "QueryConsoleIME",
+    "GetConsoleLangId",
     "AttachConsole",
     "GetConsoleSelectionInfo",
     "GetConsoleProcessList",
+
     "GetConsoleHistory",
     "SetConsoleHistory",
+    // "SetConsoleCurrentFont",
+    // "SetScreenBufferInfo",
+    // "ConsoleClientConnect",
 };
-
+#endif
 
 /* FUNCTIONS ******************************************************************/
 
@@ -397,19 +416,23 @@ ConSrvConnect(IN PCSR_PROCESS CsrProcess,
      **************************************************************************/
 
     NTSTATUS Status = STATUS_SUCCESS;
-    PCONSOLE_CONNECTION_INFO ConnectInfo = (PCONSOLE_CONNECTION_INFO)ConnectionInfo;
+    PCONSRV_API_CONNECTINFO ConnectInfo = (PCONSRV_API_CONNECTINFO)ConnectionInfo;
     PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrProcess);
 
     if ( ConnectionInfo       == NULL ||
          ConnectionInfoLength == NULL ||
-        *ConnectionInfoLength != sizeof(CONSOLE_CONNECTION_INFO) )
+        *ConnectionInfoLength != sizeof(CONSRV_API_CONNECTINFO) )
     {
-        DPRINT1("CONSRV: Connection failed\n");
+        DPRINT1("CONSRV: Connection failed - ConnectionInfo = 0x%p ; ConnectionInfoLength = 0x%p (%lu), wanted %lu\n",
+                ConnectionInfo,
+                ConnectionInfoLength,
+                ConnectionInfoLength ? *ConnectionInfoLength : (ULONG)-1,
+                sizeof(CONSRV_API_CONNECTINFO));
         return STATUS_UNSUCCESSFUL;
     }
 
     /* If we don't need a console, then get out of here */
-    if (!ConnectInfo->ConsoleNeeded || !ProcessData->ConsoleApp) // In fact, it is for GUI apps.
+    if (!ConnectInfo->ConsoleStartInfo.ConsoleNeeded || !ProcessData->ConsoleApp) // In fact, it is for GUI apps.
     {
         return STATUS_SUCCESS;
     }
@@ -466,8 +489,8 @@ ConSrvConnect(IN PCSR_PROCESS CsrProcess,
     ConnectInfo->InputWaitHandle = ProcessData->ConsoleEvent;
 
     /* Set the Property-Dialog and Control-Dispatcher handlers */
-    ProcessData->PropDispatcher = ConnectInfo->PropDispatcher;
-    ProcessData->CtrlDispatcher = ConnectInfo->CtrlDispatcher;
+    ProcessData->PropDispatcher = ConnectInfo->ConsoleStartInfo.PropDispatcher;
+    ProcessData->CtrlDispatcher = ConnectInfo->ConsoleStartInfo.CtrlDispatcher;
 
     return STATUS_SUCCESS;
 }
@@ -514,7 +537,9 @@ CSR_SERVER_DLL_INIT(ConServerDllInitialization)
     LoadedServerDll->HighestApiSupported = ConsolepMaxApiNumber;
     LoadedServerDll->DispatchTable = ConsoleServerApiDispatchTable;
     LoadedServerDll->ValidTable = ConsoleServerApiServerValidTable;
+#ifdef CSR_DBG
     LoadedServerDll->NameTable = ConsoleServerApiNameTable;
+#endif
     LoadedServerDll->SizeOfProcessData = sizeof(CONSOLE_PROCESS_DATA);
     LoadedServerDll->ConnectCallback = ConSrvConnect;
     LoadedServerDll->DisconnectCallback = ConSrvDisconnect;