Author: hbelusca
Date: Thu Aug 7 13:16:49 2014
New Revision: 63834
URL:
http://svn.reactos.org/svn/reactos?rev=63834&view=rev
Log:
Second partial merge of the condrv_restructure branch, including additions from revisions
63818, 63819, 63820 and 63831.
CORE-7931 #comment Second partial merge of the condrv_restructure branch in revision
63834.
Modified:
trunk/reactos/ (props changed)
trunk/reactos/dll/cpl/console/console.c
trunk/reactos/dll/cpl/console/layout.c
trunk/reactos/dll/win32/kernel32/client/console/console.c
trunk/reactos/dll/win32/kernel32/client/console/readwrite.c
trunk/reactos/include/reactos/subsys/win/conmsg.h
trunk/reactos/win32ss/user/winsrv/consrv/console.c
trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c
trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.c
trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h
trunk/reactos/win32ss/user/winsrv/consrv/include/settings.h
Propchange: trunk/reactos/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug 7 13:16:49 2014
@@ -3,7 +3,7 @@
/branches/GSoC_2011/TcpIpDriver:51551-53074,53076-53119
/branches/GSoC_Network:51545-51546
/branches/cmake-bringup:50484,50693,50719,51544-52564
-/branches/condrv_restructure:63104-63808
+/branches/condrv_restructure:63104-63833
/branches/header-work:45691-47721
/branches/kd++:58883-58973
/branches/ntvdm:59241-63176
Modified: trunk/reactos/dll/cpl/console/console.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/console/console.c?…
==============================================================================
--- trunk/reactos/dll/cpl/console/console.c [iso-8859-1] (original)
+++ trunk/reactos/dll/cpl/console/console.c [iso-8859-1] Thu Aug 7 13:16:49 2014
@@ -115,7 +115,8 @@
wcsncpy(GuiInfo->FaceName, L"VGA", LF_FACESIZE); // HACK: !!
// GuiInfo->FaceName[0] = L'\0';
GuiInfo->FontFamily = FF_DONTCARE;
- GuiInfo->FontSize = 0;
+ GuiInfo->FontSize.X = 0;
+ GuiInfo->FontSize.Y = 0;
GuiInfo->FontWeight = FW_DONTCARE;
GuiInfo->UseRasterFonts = TRUE;
Modified: trunk/reactos/dll/cpl/console/layout.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/console/layout.c?r…
==============================================================================
--- trunk/reactos/dll/cpl/console/layout.c [iso-8859-1] (original)
+++ trunk/reactos/dll/cpl/console/layout.c [iso-8859-1] Thu Aug 7 13:16:49 2014
@@ -120,8 +120,8 @@
hBrush = CreateSolidBrush(nbkColor);
if (!hBrush) return FALSE;
- Font = CreateFontW(LOWORD(GuiInfo->FontSize),
- 0, // HIWORD(GuiInfo->FontSize),
+ Font = CreateFontW(GuiInfo->FontSize.X,
+ 0, // GuiInfo->FontSize.Y,
0,
TA_BASELINE,
GuiInfo->FontWeight,
Modified: trunk/reactos/dll/win32/kernel32/client/console/console.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/console/console.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/console/console.c [iso-8859-1] Thu Aug 7
13:16:49 2014
@@ -1076,24 +1076,37 @@
WINAPI
FreeConsole(VOID)
{
- // AG: I'm not sure if this is correct (what happens to std handles?)
- // but I just tried to reverse what AllocConsole() does...
-
- NTSTATUS Status;
- CONSOLE_API_MESSAGE ApiMessage;
-
- Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
- NULL,
- CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX,
ConsolepFree),
- sizeof(CONSOLE_FREECONSOLE));
- if (!NT_SUCCESS(Status))
- {
- BaseSetLastNTError(Status);
- return FALSE;
- }
-
+ CONSOLE_API_MESSAGE ApiMessage;
+ PCONSOLE_FREECONSOLE FreeConsoleRequest = &ApiMessage.Data.FreeConsoleRequest;
+ HANDLE ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
+
+ /* We must have a non-trivial handle to close */
+ if (ConsoleHandle == NULL) // IsConsoleHandle(ConsoleHandle)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ /* Set up the data to send to the Console Server */
+ FreeConsoleRequest->ConsoleHandle = ConsoleHandle;
+
+ /* Call the server */
+ CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
+ NULL,
+ CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepFree),
+ sizeof(*FreeConsoleRequest));
+
+ /* Check for success */
+ if (!NT_SUCCESS(ApiMessage.Status))
+ {
+ BaseSetLastNTError(ApiMessage.Status);
+ return FALSE;
+ }
+
+ /* Reset the console handle */
NtCurrentPeb()->ProcessParameters->ConsoleHandle = NULL;
+ /* Close the associated input handle */
CloseHandle(InputWaitHandle);
InputWaitHandle = INVALID_HANDLE_VALUE;
@@ -1311,7 +1324,7 @@
BaseSetLastNTError(ApiMessage.Status);
}
- DPRINT1("GetLargestConsoleWindowSize, X = %d, Y = %d\n",
GetLargestWindowSizeRequest->Size.X, GetLargestWindowSizeRequest->Size.Y);
+ DPRINT("GetLargestConsoleWindowSize, X = %d, Y = %d\n",
GetLargestWindowSizeRequest->Size.X, GetLargestWindowSizeRequest->Size.Y);
return GetLargestWindowSizeRequest->Size;
}
@@ -2602,22 +2615,67 @@
}
-/*
- * @unimplemented
- */
-BOOL WINAPI GetConsoleKeyboardLayoutNameA(LPSTR name)
-{
- STUB;
- return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL WINAPI GetConsoleKeyboardLayoutNameW(LPWSTR name)
-{
- STUB;
- return 0;
+BOOL
+IntGetConsoleKeyboardLayoutName(OUT PVOID pszLayoutName,
+ IN BOOL bAnsi)
+{
+ CONSOLE_API_MESSAGE ApiMessage;
+ PCONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest =
&ApiMessage.Data.GetKbdLayoutNameRequest;
+
+ /* Set up the data to send to the Console Server */
+ GetKbdLayoutNameRequest->ConsoleHandle =
NtCurrentPeb()->ProcessParameters->ConsoleHandle;
+ GetKbdLayoutNameRequest->Ansi = bAnsi;
+
+ /* Call the server */
+ CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
+ NULL,
+ CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX,
ConsolepGetKeyboardLayoutName),
+ sizeof(*GetKbdLayoutNameRequest));
+
+ /* Check for success */
+ if (!NT_SUCCESS(ApiMessage.Status))
+ {
+ BaseSetLastNTError(ApiMessage.Status);
+ return FALSE;
+ }
+
+ /* Retrieve the results */
+ _SEH2_TRY
+ {
+ /* Copy only KL_NAMELENGTH == 9 characters, ANSI or UNICODE */
+ if (bAnsi)
+ strncpy(pszLayoutName, (PCHAR)GetKbdLayoutNameRequest->LayoutBuffer,
KL_NAMELENGTH);
+ else
+ wcsncpy(pszLayoutName, (PWCHAR)GetKbdLayoutNameRequest->LayoutBuffer,
KL_NAMELENGTH);
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ SetLastError(ERROR_INVALID_ACCESS);
+ _SEH2_YIELD(return FALSE);
+ }
+ _SEH2_END;
+
+ return TRUE;
+}
+
+/*
+ * @implemented (undocumented)
+ */
+BOOL
+WINAPI
+GetConsoleKeyboardLayoutNameA(OUT LPSTR pszLayoutName)
+{
+ return IntGetConsoleKeyboardLayoutName(pszLayoutName, TRUE);
+}
+
+/*
+ * @implemented (undocumented)
+ */
+BOOL
+WINAPI
+GetConsoleKeyboardLayoutNameW(OUT LPWSTR pszLayoutName)
+{
+ return IntGetConsoleKeyboardLayoutName(pszLayoutName, FALSE);
}
/*
Modified: trunk/reactos/dll/win32/kernel32/client/console/readwrite.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/console/readwrite.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/console/readwrite.c [iso-8859-1] Thu Aug 7
13:16:49 2014
@@ -399,7 +399,7 @@
_SEH2_END;
NumCells = SizeX * SizeY;
- DPRINT1("IntReadConsoleOutput: (%d x %d)\n", SizeX, SizeY);
+ DPRINT("IntReadConsoleOutput: (%d x %d)\n", SizeX, SizeY);
/*
* For optimization purposes, Windows (and hence ReactOS, too, for
@@ -869,7 +869,7 @@
_SEH2_END;
NumCells = SizeX * SizeY;
- DPRINT1("IntWriteConsoleOutput: (%d x %d)\n", SizeX, SizeY);
+ DPRINT("IntWriteConsoleOutput: (%d x %d)\n", SizeX, SizeY);
/*
* For optimization purposes, Windows (and hence ReactOS, too, for
Modified: trunk/reactos/include/reactos/subsys/win/conmsg.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/subsys/win…
==============================================================================
--- trunk/reactos/include/reactos/subsys/win/conmsg.h [iso-8859-1] (original)
+++ trunk/reactos/include/reactos/subsys/win/conmsg.h [iso-8859-1] Thu Aug 7 13:16:49
2014
@@ -164,6 +164,7 @@
DWORD dwHotKey;
DWORD dwStartupFlags;
CONSOLE_PROPERTIES;
+
BOOLEAN ConsoleNeeded; // Used for GUI apps only.
LPTHREAD_START_ROUTINE CtrlDispatcher;
LPTHREAD_START_ROUTINE ImeDispatcher;
@@ -281,7 +282,7 @@
typedef struct
{
- ULONG Dummy;
+ HANDLE ConsoleHandle;
} CONSOLE_FREECONSOLE, *PCONSOLE_FREECONSOLE;
typedef struct
@@ -793,6 +794,13 @@
HANDLE EventHandle;
} CONSOLE_SETINPUTOUTPUTCP, *PCONSOLE_SETINPUTOUTPUTCP;
+typedef struct
+{
+ HANDLE ConsoleHandle;
+ CHAR LayoutBuffer[KL_NAMELENGTH * sizeof(WCHAR)]; // Can hold up to 9 wchars
+ BOOL Ansi;
+} CONSOLE_GETKBDLAYOUTNAME, *PCONSOLE_GETKBDLAYOUTNAME;
+
typedef struct _CONSOLE_API_MESSAGE
{
PORT_MESSAGE Header;
@@ -886,9 +894,10 @@
CONSOLE_SETHISTORYNUMBERCOMMANDS SetHistoryNumberCommandsRequest;
CONSOLE_SETHISTORYMODE SetHistoryModeRequest;
- /* Input and Output Code Pages */
+ /* Input and Output Code Pages; keyboard */
CONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest;
CONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest;
+ CONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest;
} Data;
} CONSOLE_API_MESSAGE, *PCONSOLE_API_MESSAGE;
Modified: trunk/reactos/win32ss/user/winsrv/consrv/console.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/console.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/console.c [iso-8859-1] Thu Aug 7 13:16:49
2014
@@ -999,50 +999,63 @@
CSR_API(SrvGetConsoleKeyboardLayoutName)
{
+ NTSTATUS Status;
+ PCONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest =
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetKbdLayoutNameRequest;
+ PCONSOLE Console;
+
+ Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
&Console, TRUE);
+ if (!NT_SUCCESS(Status)) return Status;
+
+ /* Retrieve the keyboard layout name of the system */
+ if (GetKbdLayoutNameRequest->Ansi)
+ GetKeyboardLayoutNameA((PCHAR)GetKbdLayoutNameRequest->LayoutBuffer);
+ else
+ GetKeyboardLayoutNameW((PWCHAR)GetKbdLayoutNameRequest->LayoutBuffer);
+
+ ConSrvReleaseConsole(Console, TRUE);
+ return STATUS_SUCCESS;
+}
+
+CSR_API(SrvGetConsoleCharType)
+{
DPRINT1("%s not yet implemented\n", __FUNCTION__);
return STATUS_NOT_IMPLEMENTED;
}
-CSR_API(SrvGetConsoleCharType)
+CSR_API(SrvSetConsoleLocalEUDC)
{
DPRINT1("%s not yet implemented\n", __FUNCTION__);
return STATUS_NOT_IMPLEMENTED;
}
-CSR_API(SrvSetConsoleLocalEUDC)
+CSR_API(SrvSetConsoleCursorMode)
{
DPRINT1("%s not yet implemented\n", __FUNCTION__);
return STATUS_NOT_IMPLEMENTED;
}
-CSR_API(SrvSetConsoleCursorMode)
+CSR_API(SrvGetConsoleCursorMode)
{
DPRINT1("%s not yet implemented\n", __FUNCTION__);
return STATUS_NOT_IMPLEMENTED;
}
-CSR_API(SrvGetConsoleCursorMode)
+CSR_API(SrvGetConsoleNlsMode)
{
DPRINT1("%s not yet implemented\n", __FUNCTION__);
return STATUS_NOT_IMPLEMENTED;
}
-CSR_API(SrvGetConsoleNlsMode)
+CSR_API(SrvSetConsoleNlsMode)
{
DPRINT1("%s not yet implemented\n", __FUNCTION__);
return STATUS_NOT_IMPLEMENTED;
}
-CSR_API(SrvSetConsoleNlsMode)
+CSR_API(SrvGetConsoleLangId)
{
DPRINT1("%s not yet implemented\n", __FUNCTION__);
return STATUS_NOT_IMPLEMENTED;
}
-CSR_API(SrvGetConsoleLangId)
-{
- DPRINT1("%s not yet implemented\n", __FUNCTION__);
- return STATUS_NOT_IMPLEMENTED;
-}
-
/* EOF */
Modified: trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c [iso-8859-1]
(original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c [iso-8859-1] Thu Aug
7 13:16:49 2014
@@ -506,8 +506,8 @@
GuiData->hWindow = hWnd;
- GuiData->Font = CreateFontW(LOWORD(GuiData->GuiInfo.FontSize),
- 0, // HIWORD(GuiData->GuiInfo.FontSize),
+ GuiData->Font = CreateFontW(GuiData->GuiInfo.FontSize.X,
+ 0, // GuiData->GuiInfo.FontSize.Y,
0,
TA_BASELINE,
GuiData->GuiInfo.FontWeight,
@@ -2321,6 +2321,19 @@
break;
}
+ /*
+ * Undocumented message sent by Windows' console.dll for applying console
info.
+ * See
http://www.catch22.net/sites/default/source/files/setconsoleinfo.c
+ * and
http://www.scn.rain.com/~neighorn/PDF/MSBugPaper.pdf
+ * for more information.
+ */
+ case WM_SETCONSOLEINFO:
+ {
+ DPRINT1("WM_SETCONSOLEINFO message\n");
+ GuiApplyWindowsConsoleSettings(GuiData, (HANDLE)wParam);
+ break;
+ }
+
case PM_CONSOLE_BEEP:
DPRINT1("Beep !!\n");
Beep(800, 200);
Modified: trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.c [iso-8859-1]
(original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.c [iso-8859-1] Thu
Aug 7 13:16:49 2014
@@ -98,7 +98,8 @@
}
else if (!wcscmp(szValueName, L"FontSize"))
{
- TermInfo->FontSize = Value;
+ TermInfo->FontSize.X = LOWORD(Value);
+ TermInfo->FontSize.Y = HIWORD(Value);
RetVal = TRUE;
}
else if (!wcscmp(szValueName, L"FontWeight"))
@@ -159,7 +160,10 @@
SetConsoleSetting(L"FaceName", REG_SZ, (wcslen(TermInfo->FaceName) + 1)
* sizeof(WCHAR), TermInfo->FaceName, L'\0'); // wcsnlen
SetConsoleSetting(L"FontFamily", REG_DWORD, sizeof(DWORD),
&TermInfo->FontFamily, FF_DONTCARE);
- SetConsoleSetting(L"FontSize", REG_DWORD, sizeof(DWORD),
&TermInfo->FontSize, 0);
+
+ Storage = MAKELONG(TermInfo->FontSize.X, TermInfo->FontSize.Y);
+ SetConsoleSetting(L"FontSize", REG_DWORD, sizeof(DWORD), &Storage, 0);
+
SetConsoleSetting(L"FontWeight", REG_DWORD, sizeof(DWORD),
&TermInfo->FontWeight, FW_DONTCARE);
Storage = TermInfo->FullScreen;
@@ -200,7 +204,8 @@
wcsncpy(TermInfo->FaceName, L"VGA", LF_FACESIZE); // HACK: !!
// TermInfo->FaceName[0] = L'\0';
TermInfo->FontFamily = FF_DONTCARE;
- TermInfo->FontSize = 0;
+ TermInfo->FontSize.X = 0;
+ TermInfo->FontSize.Y = 0;
TermInfo->FontWeight = FW_DONTCARE;
TermInfo->UseRasterFonts = TRUE;
@@ -544,4 +549,180 @@
return;
}
+/*
+ * Function for dealing with the undocumented message and structure used by
+ * Windows' console.dll for setting console info.
+ * See
http://www.catch22.net/sites/default/source/files/setconsoleinfo.c
+ * and
http://www.scn.rain.com/~neighorn/PDF/MSBugPaper.pdf
+ * for more information.
+ */
+VOID
+GuiApplyWindowsConsoleSettings(PGUI_CONSOLE_DATA GuiData,
+ HANDLE hClientSection)
+{
+ NTSTATUS Status = STATUS_SUCCESS;
+ PCONSOLE Console = GuiData->Console;
+ PCONSOLE_PROCESS_DATA ProcessData;
+ HANDLE hSection = NULL;
+ ULONG ViewSize = 0;
+ PCONSOLE_STATE_INFO pConInfo = NULL;
+ CONSOLE_INFO ConInfo;
+ GUI_CONSOLE_INFO GuiInfo;
+ SIZE_T Length;
+
+ if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_RUNNING, TRUE)) return;
+
+ /* Get the console leader process, our client */
+ ProcessData = ConSrvGetConsoleLeaderProcess(Console);
+
+ /* Duplicate the section handle for ourselves */
+ Status = NtDuplicateObject(ProcessData->Process->ProcessHandle,
+ hClientSection,
+ NtCurrentProcess(),
+ &hSection,
+ 0, 0, DUPLICATE_SAME_ACCESS);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Error when mapping client handle, Status = %lu\n", Status);
+ goto Quit;
+ }
+
+ /* Get a view of the shared section */
+ Status = NtMapViewOfSection(hSection,
+ NtCurrentProcess(),
+ (PVOID*)&pConInfo,
+ 0,
+ 0,
+ NULL,
+ &ViewSize,
+ ViewUnmap,
+ 0,
+ PAGE_READWRITE);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Error when mapping view of file, Status = %lu\n", Status);
+ goto Quit;
+ }
+
+ _SEH2_TRY
+ {
+ /* Check that the section is well-sized */
+ if ( (ViewSize < sizeof(CONSOLE_STATE_INFO)) ||
+ (pConInfo->cbSize != sizeof(CONSOLE_STATE_INFO)) )
+ {
+ DPRINT1("Error: section bad-sized: sizeof(Section) <
sizeof(CONSOLE_STATE_INFO)\n");
+ Status = STATUS_INVALID_VIEW_SIZE;
+ _SEH2_YIELD(goto Quit);
+ }
+
+ // TODO: Check that GuiData->hWindow == pConInfo->hConsoleWindow
+
+ /* Retrieve terminal informations */
+
+ // Console information
+ ConInfo.HistoryBufferSize = pConInfo->HistoryBufferSize;
+ ConInfo.NumberOfHistoryBuffers = pConInfo->NumberOfHistoryBuffers;
+ ConInfo.HistoryNoDup = !!pConInfo->HistoryNoDup;
+ ConInfo.QuickEdit = !!pConInfo->QuickEdit;
+ ConInfo.InsertMode = !!pConInfo->InsertMode;
+ ConInfo.ScreenBufferSize = pConInfo->ScreenBufferSize;
+ ConInfo.ConsoleSize = pConInfo->WindowSize;
+ ConInfo.CursorSize = pConInfo->CursorSize;
+ ConInfo.ScreenAttrib = pConInfo->ScreenColors;
+ ConInfo.PopupAttrib = pConInfo->PopupColors;
+ memcpy(&ConInfo.Colors, pConInfo->ColorTable, sizeof(ConInfo.Colors));
+ ConInfo.CodePage = pConInfo->CodePage;
+ /**ConInfo.ConsoleTitle[MAX_PATH + 1] = pConInfo->ConsoleTitle; // FIXME:
memcpy**/
+#if 0
+ /* Title of the console, original one corresponding to the one set by the console
leader */
+ Length = min(sizeof(pConInfo->ConsoleTitle) /
sizeof(pConInfo->ConsoleTitle[0]) - 1,
+ Console->OriginalTitle.Length / sizeof(WCHAR));
+ wcsncpy(pSharedInfo->ci.ConsoleTitle, Console->OriginalTitle.Buffer,
Length);
+#endif
+ // ULONG ConInfo.InputBufferSize = pConInfo->
+ // BOOLEAN ConInfo.CursorBlinkOn = pConInfo->
+ // BOOLEAN ConInfo.ForceCursorOff = pConInfo->
+
+
+ // Terminal information
+ Length = min(wcslen(pConInfo->FaceName) + 1, LF_FACESIZE); // wcsnlen
+ wcsncpy(GuiInfo.FaceName, pConInfo->FaceName, LF_FACESIZE);
+ GuiInfo.FaceName[Length] = L'\0';
+
+ GuiInfo.FontFamily = pConInfo->FontFamily;
+ GuiInfo.FontSize = pConInfo->FontSize;
+ GuiInfo.FontWeight = pConInfo->FontWeight;
+ GuiInfo.FullScreen = !!pConInfo->FullScreen;
+ GuiInfo.AutoPosition = !!pConInfo->AutoPosition;
+ GuiInfo.WindowOrigin = pConInfo->WindowPosition;
+ // BOOL GuiInfo.UseRasterFonts = pConInfo->
+ // WORD GuiInfo.ShowWindow = pConInfo->
+
+
+
+ /*
+ * If we don't set the default parameters,
+ * apply them, otherwise just save them.
+ */
+#if 0
+ if (pConInfo->ShowDefaultParams == FALSE)
+#endif
+ {
+ /* Set the console informations */
+ ConSrvApplyUserSettings(Console, &ConInfo);
+
+ /* Set the terminal informations */
+
+ // memcpy(&GuiData->GuiInfo, &GuiInfo, sizeof(GUI_CONSOLE_INFO));
+
+ /* Move the window to the user's values */
+ GuiData->GuiInfo.AutoPosition = GuiInfo.AutoPosition;
+ GuiData->GuiInfo.WindowOrigin = GuiInfo.WindowOrigin;
+ GuiConsoleMoveWindow(GuiData);
+
+ InvalidateRect(GuiData->hWindow, NULL, TRUE);
+
+ /*
+ * Apply full-screen mode.
+ */
+ if (GuiInfo.FullScreen != GuiData->GuiInfo.FullScreen)
+ {
+ SwitchFullScreen(GuiData, GuiInfo.FullScreen);
+ }
+ }
+
+#if 0
+ /*
+ * Save settings if needed
+ */
+ // FIXME: Do it in the console properties applet ??
+ if (SaveSettings)
+ {
+ DWORD ProcessId =
HandleToUlong(ProcessData->Process->ClientId.UniqueProcess);
+ ConSrvWriteUserSettings(&ConInfo, ProcessId);
+ GuiConsoleWriteUserSettings(&GuiInfo, ConInfo.ConsoleTitle, ProcessId);
+ }
+#endif
+
+ Status = STATUS_SUCCESS;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status = _SEH2_GetExceptionCode();
+ DPRINT1("GuiApplyUserSettings - Caught an exception, Status = %08X\n",
Status);
+ }
+ _SEH2_END;
+
+Quit:
+ /* Finally, close the section and return */
+ if (hSection)
+ {
+ NtUnmapViewOfSection(NtCurrentProcess(), pConInfo);
+ NtClose(hSection);
+ }
+
+ LeaveCriticalSection(&Console->Lock);
+ return;
+}
+
/* EOF */
Modified: trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h [iso-8859-1]
(original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h [iso-8859-1] Thu
Aug 7 13:16:49 2014
@@ -14,7 +14,16 @@
#ifndef WM_APP
#define WM_APP 0x8000
#endif
-#define PM_APPLY_CONSOLE_INFO (WM_APP + 100)
+/* Message sent by ReactOS' console.dll for applying console info */
+#define PM_APPLY_CONSOLE_INFO (WM_APP + 100)
+
+/*
+ * Undocumented message sent by Windows' console.dll for applying console info.
+ * See
http://www.catch22.net/sites/default/source/files/setconsoleinfo.c
+ * and
http://www.scn.rain.com/~neighorn/PDF/MSBugPaper.pdf
+ * for more information.
+ */
+#define WM_SETCONSOLEINFO (WM_USER + 201)
/* STRUCTURES *****************************************************************/
@@ -22,9 +31,9 @@
{
// FONTSIGNATURE FontSignature;
WCHAR FaceName[LF_FACESIZE];
- UINT FontFamily;
- DWORD FontSize;
- DWORD FontWeight;
+ ULONG FontFamily;
+ COORD FontSize;
+ ULONG FontWeight;
BOOL UseRasterFonts;
BOOL FullScreen; /* Whether the console is displayed in full-screen or
windowed mode */
@@ -34,6 +43,46 @@
BOOL AutoPosition;
POINT WindowOrigin;
} GUI_CONSOLE_INFO, *PGUI_CONSOLE_INFO;
+
+/*
+ * Undocumented structure used by Windows' console.dll for setting console info.
+ * See
http://www.catch22.net/sites/default/source/files/setconsoleinfo.c
+ * and
http://www.scn.rain.com/~neighorn/PDF/MSBugPaper.pdf
+ * for more information.
+ */
+#pragma pack(push, 1)
+typedef struct _CONSOLE_STATE_INFO
+{
+ ULONG cbSize;
+ COORD ScreenBufferSize;
+ COORD WindowSize;
+ POINT WindowPosition; // WindowPosX and Y
+
+ COORD FontSize;
+ ULONG FontFamily;
+ ULONG FontWeight;
+ WCHAR FaceName[LF_FACESIZE];
+
+ ULONG CursorSize;
+ BOOL FullScreen;
+ BOOL QuickEdit;
+ BOOL AutoPosition;
+ BOOL InsertMode;
+
+ USHORT ScreenColors; // ScreenAttributes
+ USHORT PopupColors; // PopupAttributes
+ BOOL HistoryNoDup;
+ ULONG HistoryBufferSize;
+ ULONG NumberOfHistoryBuffers;
+
+ COLORREF ColorTable[16];
+
+ ULONG CodePage;
+ HWND HWnd;
+
+ WCHAR ConsoleTitle[256];
+} CONSOLE_STATE_INFO, *PCONSOLE_STATE_INFO;
+#pragma pack(pop)
#ifndef CONSOLE_H__ // If we aren't included by console.dll
@@ -59,6 +108,9 @@
GuiApplyUserSettings(PGUI_CONSOLE_DATA GuiData,
HANDLE hClientSection,
BOOL SaveSettings);
+VOID
+GuiApplyWindowsConsoleSettings(PGUI_CONSOLE_DATA GuiData,
+ HANDLE hClientSection);
#endif
Modified: trunk/reactos/win32ss/user/winsrv/consrv/include/settings.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/include/settings.h [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/include/settings.h [iso-8859-1] Thu Aug 7
13:16:49 2014
@@ -10,6 +10,8 @@
#pragma once
/* STRUCTURES *****************************************************************/
+
+#pragma pack(push, 1)
/*
* Structure used to hold terminal-specific information
@@ -69,6 +71,8 @@
TERMINAL_INFO TerminalInfo; /* Frontend-specific parameters */
} CONSOLE_PROPS, *PCONSOLE_PROPS;
+#pragma pack(pop)
+
/* FUNCTIONS ******************************************************************/
#ifndef CONSOLE_H__ // If we aren't included by console.dll