2013-06-23 00:18:47 +00:00
|
|
|
/*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS Console Server DLL
|
2015-10-05 12:21:25 +00:00
|
|
|
* FILE: win32ss/user/winsrv/consrv/frontendctl.c
|
2013-06-23 00:18:47 +00:00
|
|
|
* PURPOSE: Terminal Front-Ends Control
|
|
|
|
* PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* INCLUDES *******************************************************************/
|
|
|
|
|
|
|
|
#include "consrv.h"
|
|
|
|
|
|
|
|
#define NDEBUG
|
|
|
|
#include <debug.h>
|
|
|
|
|
|
|
|
/* PUBLIC SERVER APIS *********************************************************/
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* HardwareStateProperty
|
|
|
|
*
|
|
|
|
* DESCRIPTION
|
|
|
|
* Set/Get the value of the HardwareState and switch
|
|
|
|
* between direct video buffer ouput and GDI windowed
|
|
|
|
* output.
|
|
|
|
* ARGUMENTS
|
|
|
|
* Client hands us a CONSOLE_GETSETHWSTATE object.
|
|
|
|
* We use the same object to Request.
|
|
|
|
* NOTE
|
|
|
|
* ConsoleHwState has the correct size to be compatible
|
|
|
|
* with NT's, but values are not.
|
|
|
|
*/
|
|
|
|
#if 0
|
2014-05-02 16:46:13 +00:00
|
|
|
static NTSTATUS
|
2014-08-11 20:39:06 +00:00
|
|
|
SetConsoleHardwareState(PCONSRV_CONSOLE Console, ULONG ConsoleHwState)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
|
|
|
DPRINT1("Console Hardware State: %d\n", ConsoleHwState);
|
|
|
|
|
|
|
|
if ((CONSOLE_HARDWARE_STATE_GDI_MANAGED == ConsoleHwState)
|
|
|
|
||(CONSOLE_HARDWARE_STATE_DIRECT == ConsoleHwState))
|
|
|
|
{
|
|
|
|
if (Console->HardwareState != ConsoleHwState)
|
|
|
|
{
|
|
|
|
/* TODO: implement switching from full screen to windowed mode */
|
|
|
|
/* TODO: or back; now simply store the hardware state */
|
|
|
|
Console->HardwareState = ConsoleHwState;
|
|
|
|
}
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
return STATUS_INVALID_PARAMETER_3; /* Client: (handle, set_get, [mode]) */
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepGetHardwareState */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvGetConsoleHardwareState,
|
|
|
|
CONSOLE_GETSETHWSTATE, HardwareStateRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
|
|
|
#if 0
|
|
|
|
NTSTATUS Status;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetTextModeBuffer(ProcessData,
|
2013-06-23 00:18:47 +00:00
|
|
|
HardwareStateRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_READ,
|
|
|
|
TRUE);
|
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
|
|
|
|
2013-06-23 00:18:47 +00:00
|
|
|
HardwareStateRequest->State = Console->HardwareState;
|
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
return STATUS_SUCCESS;
|
2013-06-23 00:18:47 +00:00
|
|
|
#else
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepSetHardwareState */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvSetConsoleHardwareState,
|
|
|
|
CONSOLE_GETSETHWSTATE, HardwareStateRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
|
|
|
#if 0
|
|
|
|
NTSTATUS Status;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetTextModeBuffer(ProcessData,
|
2013-06-23 00:18:47 +00:00
|
|
|
HardwareStateRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_WRITE,
|
|
|
|
TRUE);
|
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
2020-04-12 10:45:31 +00:00
|
|
|
|
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
2013-06-23 00:18:47 +00:00
|
|
|
|
|
|
|
DPRINT("Setting console hardware state.\n");
|
|
|
|
Status = SetConsoleHardwareState(Console, HardwareStateRequest->State);
|
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
return STATUS_SUCCESS;
|
2013-06-23 00:18:47 +00:00
|
|
|
#else
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepGetDisplayMode */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvGetConsoleDisplayMode,
|
|
|
|
CONSOLE_GETDISPLAYMODE, GetDisplayModeRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
2013-10-10 01:16:02 +00:00
|
|
|
GetDisplayModeRequest->DisplayMode = TermGetDisplayMode(Console);
|
2013-06-23 00:18:47 +00:00
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepSetDisplayMode */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvSetConsoleDisplayMode,
|
|
|
|
CONSOLE_SETDISPLAYMODE, SetDisplayModeRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
|
|
|
NTSTATUS Status;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetScreenBuffer(ProcessData,
|
2013-06-23 00:18:47 +00:00
|
|
|
SetDisplayModeRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_WRITE,
|
|
|
|
TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
2013-06-23 00:18:47 +00:00
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
2013-06-23 00:18:47 +00:00
|
|
|
|
2013-10-10 01:16:02 +00:00
|
|
|
if (TermSetDisplayMode(Console, SetDisplayModeRequest->DisplayMode))
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
|
|
|
SetDisplayModeRequest->NewSBDim = Buff->ScreenBufferSize;
|
|
|
|
Status = STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Status = STATUS_INVALID_PARAMETER;
|
|
|
|
}
|
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
|
|
|
return Status;
|
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepGetLargestWindowSize */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvGetLargestConsoleWindowSize,
|
|
|
|
CONSOLE_GETLARGESTWINDOWSIZE, GetLargestWindowSizeRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
|
|
|
NTSTATUS Status;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetTextModeBuffer(ProcessData,
|
2014-08-31 14:04:03 +00:00
|
|
|
GetLargestWindowSizeRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_READ,
|
|
|
|
TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
2013-06-23 00:18:47 +00:00
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
2016-10-18 23:51:59 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Retrieve the largest possible console window size, without
|
|
|
|
* taking into account the size of the console screen buffer
|
|
|
|
* (thus differs from ConDrvGetConsoleScreenBufferInfo).
|
|
|
|
*/
|
2013-10-10 01:16:02 +00:00
|
|
|
TermGetLargestConsoleWindowSize(Console, &GetLargestWindowSizeRequest->Size);
|
2013-06-23 00:18:47 +00:00
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepShowCursor */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvShowConsoleCursor,
|
|
|
|
CONSOLE_SHOWCURSOR, ShowCursorRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
|
|
|
NTSTATUS Status;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetScreenBuffer(ProcessData,
|
2013-06-23 00:18:47 +00:00
|
|
|
ShowCursorRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_WRITE,
|
|
|
|
TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
2013-06-23 00:18:47 +00:00
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
2013-06-23 00:18:47 +00:00
|
|
|
|
2013-10-10 01:16:02 +00:00
|
|
|
ShowCursorRequest->RefCount = TermShowMouseCursor(Console, ShowCursorRequest->Show);
|
2013-06-23 00:18:47 +00:00
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepSetCursor */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvSetConsoleCursor,
|
|
|
|
CONSOLE_SETCURSOR, SetCursorRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
|
|
|
NTSTATUS Status;
|
|
|
|
BOOL Success;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2015-12-05 00:51:48 +00:00
|
|
|
// NOTE: Tests show that this function is used only for graphics screen buffers
|
|
|
|
// and otherwise it returns FALSE and sets last error to ERROR_INVALID_HANDLE.
|
|
|
|
// I find that behaviour is ridiculous but ok, let's accept it at the moment...
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetGraphicsBuffer(ProcessData,
|
2013-06-23 00:18:47 +00:00
|
|
|
SetCursorRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_WRITE,
|
|
|
|
TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
2013-06-23 00:18:47 +00:00
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
2013-06-23 00:18:47 +00:00
|
|
|
|
2014-03-08 15:31:05 +00:00
|
|
|
Success = TermSetMouseCursor(Console, SetCursorRequest->CursorHandle);
|
2013-06-23 00:18:47 +00:00
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
|
|
|
return (Success ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
|
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepMenuControl */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvConsoleMenuControl,
|
|
|
|
CONSOLE_MENUCONTROL, MenuControlRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
|
|
|
NTSTATUS Status;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetScreenBuffer(ProcessData,
|
2013-06-23 00:18:47 +00:00
|
|
|
MenuControlRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_WRITE,
|
|
|
|
TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
2013-06-23 00:18:47 +00:00
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
2013-06-23 00:18:47 +00:00
|
|
|
|
2014-03-08 15:31:05 +00:00
|
|
|
MenuControlRequest->MenuHandle = TermMenuControl(Console,
|
|
|
|
MenuControlRequest->CmdIdLow,
|
|
|
|
MenuControlRequest->CmdIdHigh);
|
2013-06-23 00:18:47 +00:00
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepSetMenuClose */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvSetConsoleMenuClose,
|
|
|
|
CONSOLE_SETMENUCLOSE, SetMenuCloseRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
2020-04-12 10:45:31 +00:00
|
|
|
return (TermSetMenuClose(Console, SetMenuCloseRequest->Enable)
|
|
|
|
? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
|
2013-06-23 00:18:47 +00:00
|
|
|
}
|
|
|
|
|
2019-04-28 00:40:20 +00:00
|
|
|
/* Used by USERSRV!SrvGetThreadConsoleDesktop() */
|
|
|
|
NTSTATUS
|
|
|
|
NTAPI
|
|
|
|
GetThreadConsoleDesktop(
|
|
|
|
IN ULONG_PTR ThreadId,
|
|
|
|
OUT HDESK* ConsoleDesktop)
|
|
|
|
{
|
|
|
|
NTSTATUS Status;
|
|
|
|
PCSR_THREAD CsrThread;
|
|
|
|
PCONSRV_CONSOLE Console;
|
|
|
|
|
|
|
|
/* No console desktop handle by default */
|
|
|
|
*ConsoleDesktop = NULL;
|
|
|
|
|
|
|
|
/* Retrieve and lock the thread */
|
|
|
|
Status = CsrLockThreadByClientId(ULongToHandle(ThreadId), &CsrThread);
|
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
|
|
|
|
|
|
|
ASSERT(CsrThread->Process);
|
|
|
|
|
|
|
|
/* Retrieve the console to which the process is attached, and unlock the thread */
|
|
|
|
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrThread->Process),
|
|
|
|
&Console, TRUE);
|
|
|
|
CsrUnlockThread(CsrThread);
|
|
|
|
|
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
|
|
|
|
|
|
|
/* Retrieve the console desktop handle, and release the console */
|
|
|
|
*ConsoleDesktop = TermGetThreadConsoleDesktop(Console);
|
|
|
|
ConSrvReleaseConsole(Console, TRUE);
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepGetConsoleWindow */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvGetConsoleWindow,
|
|
|
|
CONSOLE_GETWINDOW, GetWindowRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
2013-10-10 01:16:02 +00:00
|
|
|
GetWindowRequest->WindowHandle = TermGetConsoleWindowHandle(Console);
|
2013-06-23 00:18:47 +00:00
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepSetIcon */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvSetConsoleIcon,
|
|
|
|
CONSOLE_SETICON, SetIconRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
2020-04-12 10:45:31 +00:00
|
|
|
return (TermChangeIcon(Console, SetIconRequest->IconHandle)
|
|
|
|
? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
|
2013-06-23 00:18:47 +00:00
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepGetSelectionInfo */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvGetConsoleSelectionInfo,
|
|
|
|
CONSOLE_GETSELECTIONINFO, GetSelectionInfoRequest)
|
2013-06-23 00:18:47 +00:00
|
|
|
{
|
2020-04-12 10:45:31 +00:00
|
|
|
return (TermGetSelectionInfo(Console, &GetSelectionInfoRequest->Info)
|
|
|
|
? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
|
2013-06-23 00:18:47 +00:00
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepGetNumberOfFonts */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvGetConsoleNumberOfFonts,
|
|
|
|
CONSOLE_GETNUMFONTS, GetNumFontsRequest)
|
2013-08-30 17:53:45 +00:00
|
|
|
{
|
2015-12-05 00:51:48 +00:00
|
|
|
// FIXME!
|
|
|
|
// TermGetNumberOfFonts(Console, ...);
|
2013-08-30 17:53:45 +00:00
|
|
|
DPRINT1("%s not yet implemented\n", __FUNCTION__);
|
2015-12-05 00:51:48 +00:00
|
|
|
GetNumFontsRequest->NumFonts = 0;
|
|
|
|
return STATUS_SUCCESS;
|
2013-08-30 17:53:45 +00:00
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepGetFontInfo */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvGetConsoleFontInfo,
|
|
|
|
CONSOLE_GETFONTINFO, GetFontInfoRequest)
|
2013-08-30 17:53:45 +00:00
|
|
|
{
|
2015-12-05 00:51:48 +00:00
|
|
|
NTSTATUS Status;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetTextModeBuffer(ProcessData,
|
2015-12-05 00:51:48 +00:00
|
|
|
GetFontInfoRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_READ,
|
|
|
|
TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
|
|
|
|
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
2015-12-05 00:51:48 +00:00
|
|
|
|
|
|
|
// FIXME!
|
|
|
|
// TermGetFontInfo(Console, ...);
|
2013-08-30 17:53:45 +00:00
|
|
|
DPRINT1("%s not yet implemented\n", __FUNCTION__);
|
2015-12-05 00:51:48 +00:00
|
|
|
GetFontInfoRequest->NumFonts = 0;
|
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
|
|
|
return STATUS_SUCCESS;
|
2013-08-30 17:53:45 +00:00
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepGetFontSize */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvGetConsoleFontSize,
|
|
|
|
CONSOLE_GETFONTSIZE, GetFontSizeRequest)
|
2013-08-30 17:53:45 +00:00
|
|
|
{
|
2015-12-05 00:51:48 +00:00
|
|
|
NTSTATUS Status;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetTextModeBuffer(ProcessData,
|
2015-12-05 00:51:48 +00:00
|
|
|
GetFontSizeRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_READ,
|
|
|
|
TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
|
|
|
|
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
2015-12-05 00:51:48 +00:00
|
|
|
|
|
|
|
// FIXME!
|
|
|
|
// TermGetFontSize(Console, ...);
|
2013-08-30 17:53:45 +00:00
|
|
|
DPRINT1("%s not yet implemented\n", __FUNCTION__);
|
2015-12-05 00:51:48 +00:00
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
|
|
|
return STATUS_SUCCESS;
|
2013-08-30 17:53:45 +00:00
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepGetCurrentFont */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvGetConsoleCurrentFont,
|
|
|
|
CONSOLE_GETCURRENTFONT, GetCurrentFontRequest)
|
2013-08-30 17:53:45 +00:00
|
|
|
{
|
2015-12-05 00:51:48 +00:00
|
|
|
NTSTATUS Status;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetTextModeBuffer(ProcessData,
|
2015-12-05 00:51:48 +00:00
|
|
|
GetCurrentFontRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_READ,
|
|
|
|
TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
|
|
|
|
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
2015-12-05 00:51:48 +00:00
|
|
|
|
|
|
|
// FIXME!
|
|
|
|
// TermGetCurrentFont(Console, ...);
|
2013-08-30 17:53:45 +00:00
|
|
|
DPRINT1("%s not yet implemented\n", __FUNCTION__);
|
2015-12-05 00:51:48 +00:00
|
|
|
GetCurrentFontRequest->FontIndex = 0;
|
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
|
|
|
return STATUS_SUCCESS;
|
2013-08-30 17:53:45 +00:00
|
|
|
}
|
|
|
|
|
2019-12-31 00:21:42 +00:00
|
|
|
/* API_NUMBER: ConsolepSetFont */
|
2020-04-12 10:45:31 +00:00
|
|
|
CON_API(SrvSetConsoleFont,
|
|
|
|
CONSOLE_SETFONT, SetFontRequest)
|
2013-08-30 17:53:45 +00:00
|
|
|
{
|
2015-12-05 00:51:48 +00:00
|
|
|
NTSTATUS Status;
|
|
|
|
PCONSOLE_SCREEN_BUFFER Buff;
|
|
|
|
|
2020-04-12 10:45:31 +00:00
|
|
|
Status = ConSrvGetTextModeBuffer(ProcessData,
|
2015-12-05 00:51:48 +00:00
|
|
|
SetFontRequest->OutputHandle,
|
|
|
|
&Buff,
|
|
|
|
GENERIC_WRITE,
|
|
|
|
TRUE);
|
2020-04-12 10:45:31 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
return Status;
|
|
|
|
|
|
|
|
ASSERT((PCONSOLE)Console == Buff->Header.Console);
|
2015-12-05 00:51:48 +00:00
|
|
|
|
|
|
|
// FIXME!
|
|
|
|
// TermSetFont(Console, ...);
|
2013-08-30 17:53:45 +00:00
|
|
|
DPRINT1("%s not yet implemented\n", __FUNCTION__);
|
2015-12-05 00:51:48 +00:00
|
|
|
|
|
|
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
|
|
|
return STATUS_SUCCESS;
|
2013-08-30 17:53:45 +00:00
|
|
|
}
|
|
|
|
|
2013-06-23 00:18:47 +00:00
|
|
|
/* EOF */
|