mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 07:56:59 +00:00
[CONSRV]
- Give the process handle which creates the screenbuffer, to ConDrvCreateScreenBuffer. - Few code refactoring. svn path=/trunk/; revision=65561
This commit is contained in:
parent
96d86fca58
commit
03e7e918aa
6 changed files with 42 additions and 33 deletions
|
@ -18,11 +18,13 @@
|
|||
|
||||
NTSTATUS
|
||||
TEXTMODE_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||
IN OUT PCONSOLE Console,
|
||||
IN PCONSOLE Console,
|
||||
IN HANDLE ProcessHandle,
|
||||
IN PTEXTMODE_BUFFER_INFO TextModeInfo);
|
||||
NTSTATUS
|
||||
GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||
IN OUT PCONSOLE Console,
|
||||
IN PCONSOLE Console,
|
||||
IN HANDLE ProcessHandle,
|
||||
IN PGRAPHICS_BUFFER_INFO GraphicsInfo);
|
||||
|
||||
VOID
|
||||
|
@ -33,7 +35,7 @@ GRAPHICS_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer);
|
|||
|
||||
NTSTATUS
|
||||
CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||
IN OUT PCONSOLE Console,
|
||||
IN PCONSOLE Console,
|
||||
IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
|
||||
IN SIZE_T Size)
|
||||
{
|
||||
|
@ -77,7 +79,8 @@ CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer)
|
|||
// ConDrvCreateConsoleScreenBuffer
|
||||
NTSTATUS
|
||||
ConDrvCreateScreenBuffer(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||
IN OUT PCONSOLE Console,
|
||||
IN PCONSOLE Console,
|
||||
IN HANDLE ProcessHandle OPTIONAL,
|
||||
IN ULONG BufferType,
|
||||
IN PVOID ScreenBufferInfo)
|
||||
{
|
||||
|
@ -89,14 +92,18 @@ ConDrvCreateScreenBuffer(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
|||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
/* Use the current process if ProcessHandle is NULL */
|
||||
if (ProcessHandle == NULL)
|
||||
ProcessHandle = NtCurrentProcess();
|
||||
|
||||
if (BufferType == CONSOLE_TEXTMODE_BUFFER)
|
||||
{
|
||||
Status = TEXTMODE_BUFFER_Initialize(Buffer, Console,
|
||||
Status = TEXTMODE_BUFFER_Initialize(Buffer, Console, ProcessHandle,
|
||||
(PTEXTMODE_BUFFER_INFO)ScreenBufferInfo);
|
||||
}
|
||||
else if (BufferType == CONSOLE_GRAPHICS_BUFFER)
|
||||
{
|
||||
Status = GRAPHICS_BUFFER_Initialize(Buffer, Console,
|
||||
Status = GRAPHICS_BUFFER_Initialize(Buffer, Console, ProcessHandle,
|
||||
(PGRAPHICS_BUFFER_INFO)ScreenBufferInfo);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -79,22 +79,24 @@ RemoveConsole(IN PCONSOLE Console)
|
|||
VOID NTAPI
|
||||
ConDrvPause(PCONSOLE Console)
|
||||
{
|
||||
if (!Console->UnpauseEvent)
|
||||
{
|
||||
NtCreateEvent(&Console->UnpauseEvent, EVENT_ALL_ACCESS,
|
||||
NULL, NotificationEvent, FALSE);
|
||||
}
|
||||
/* In case we already have a pause event, just exit... */
|
||||
if (Console->UnpauseEvent) return;
|
||||
|
||||
/* ... otherwise create it */
|
||||
NtCreateEvent(&Console->UnpauseEvent, EVENT_ALL_ACCESS,
|
||||
NULL, NotificationEvent, FALSE);
|
||||
}
|
||||
|
||||
VOID NTAPI
|
||||
ConDrvUnpause(PCONSOLE Console)
|
||||
{
|
||||
if (Console->UnpauseEvent)
|
||||
{
|
||||
NtSetEvent(Console->UnpauseEvent, NULL);
|
||||
NtClose(Console->UnpauseEvent);
|
||||
Console->UnpauseEvent = NULL;
|
||||
}
|
||||
/* In case we already freed the event, just exit... */
|
||||
if (!Console->UnpauseEvent) return;
|
||||
|
||||
/* ... otherwise set and free it */
|
||||
NtSetEvent(Console->UnpauseEvent, NULL);
|
||||
NtClose(Console->UnpauseEvent);
|
||||
Console->UnpauseEvent = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -152,8 +154,6 @@ ConDrvInitConsoleSupport(VOID)
|
|||
/* Initialize the console list and its lock */
|
||||
InitializeListHead(&ConsoleList);
|
||||
RtlInitializeResource(&ListLock);
|
||||
|
||||
/* Should call LoadKeyboardLayout */
|
||||
}
|
||||
|
||||
/* For resetting the terminal - defined in dummyterm.c */
|
||||
|
@ -229,6 +229,7 @@ ConDrvInitConsole(OUT PCONSOLE* NewConsole,
|
|||
InitializeListHead(&Console->BufferList);
|
||||
Status = ConDrvCreateScreenBuffer(&NewBuffer,
|
||||
Console,
|
||||
NULL,
|
||||
CONSOLE_TEXTMODE_BUFFER,
|
||||
&ScreenBufferInfo);
|
||||
if (!NT_SUCCESS(Status))
|
||||
|
@ -291,14 +292,12 @@ ConDrvRegisterTerminal(IN PCONSOLE Console,
|
|||
/* We failed, detach the terminal from the console */
|
||||
Terminal->Console = NULL; // For the caller
|
||||
ResetTerminal(Console);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* Copy buffer contents to screen */
|
||||
// Terminal.Draw();
|
||||
// ConioDrawConsole(Console);
|
||||
DPRINT("Console drawn\n");
|
||||
|
||||
DPRINT("Terminal initialization done\n");
|
||||
return STATUS_SUCCESS;
|
||||
|
@ -365,8 +364,6 @@ ConDrvDeleteConsole(IN PCONSOLE Console)
|
|||
LeaveCriticalSection(&Console->Lock);
|
||||
ConDrvUnlockConsoleList();
|
||||
|
||||
/* FIXME: Send a terminate message to all the processes owning this console */
|
||||
|
||||
/* Deregister the terminal */
|
||||
DPRINT("Deregister terminal\n");
|
||||
ConDrvDeregisterTerminal(Console);
|
||||
|
|
|
@ -33,7 +33,7 @@ static CONSOLE_SCREEN_BUFFER_VTBL GraphicsVtbl =
|
|||
|
||||
NTSTATUS
|
||||
CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||
IN OUT PCONSOLE Console,
|
||||
IN PCONSOLE Console,
|
||||
IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
|
||||
IN SIZE_T Size);
|
||||
VOID
|
||||
|
@ -42,7 +42,8 @@ CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer);
|
|||
|
||||
NTSTATUS
|
||||
GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||
IN OUT PCONSOLE Console,
|
||||
IN PCONSOLE Console,
|
||||
IN HANDLE ProcessHandle,
|
||||
IN PGRAPHICS_BUFFER_INFO GraphicsInfo)
|
||||
{
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
@ -50,7 +51,6 @@ GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
|||
|
||||
LARGE_INTEGER SectionSize;
|
||||
ULONG ViewSize = 0;
|
||||
HANDLE ProcessHandle;
|
||||
|
||||
if (Buffer == NULL || Console == NULL || GraphicsInfo == NULL)
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
|
@ -69,7 +69,6 @@ GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
|||
* correctly the allocated resources when the client releases the
|
||||
* screen buffer.
|
||||
*/
|
||||
ProcessHandle = CsrGetClientThread()->Process->ProcessHandle;
|
||||
NewBuffer->ClientProcess = ProcessHandle;
|
||||
|
||||
/* Get infos from the graphics buffer information structure */
|
||||
|
|
|
@ -51,7 +51,7 @@ ClearLineBuffer(PTEXTMODE_SCREEN_BUFFER Buff);
|
|||
|
||||
NTSTATUS
|
||||
CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||
IN OUT PCONSOLE Console,
|
||||
IN PCONSOLE Console,
|
||||
IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
|
||||
IN SIZE_T Size);
|
||||
VOID
|
||||
|
@ -60,12 +60,15 @@ CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer);
|
|||
|
||||
NTSTATUS
|
||||
TEXTMODE_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||
IN OUT PCONSOLE Console,
|
||||
IN PCONSOLE Console,
|
||||
IN HANDLE ProcessHandle,
|
||||
IN PTEXTMODE_BUFFER_INFO TextModeInfo)
|
||||
{
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
PTEXTMODE_SCREEN_BUFFER NewBuffer = NULL;
|
||||
|
||||
UNREFERENCED_PARAMETER(ProcessHandle);
|
||||
|
||||
if (Console == NULL || Buffer == NULL || TextModeInfo == NULL)
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
|
||||
|
|
|
@ -169,7 +169,8 @@ CSR_API(SrvCreateConsoleScreenBuffer)
|
|||
{
|
||||
NTSTATUS Status = STATUS_INVALID_PARAMETER;
|
||||
PCONSOLE_CREATESCREENBUFFER CreateScreenBufferRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.CreateScreenBufferRequest;
|
||||
PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process);
|
||||
PCSR_PROCESS Process = CsrGetClientThread()->Process;
|
||||
PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(Process);
|
||||
PCONSRV_CONSOLE Console;
|
||||
PCONSOLE_SCREEN_BUFFER Buff;
|
||||
|
||||
|
@ -253,6 +254,7 @@ CSR_API(SrvCreateConsoleScreenBuffer)
|
|||
|
||||
Status = ConDrvCreateScreenBuffer(&Buff,
|
||||
(PCONSOLE)Console,
|
||||
Process->ProcessHandle,
|
||||
CreateScreenBufferRequest->ScreenBufferType,
|
||||
ScreenBufferInfo);
|
||||
if (!NT_SUCCESS(Status)) goto Quit;
|
||||
|
|
|
@ -34,9 +34,10 @@
|
|||
ConSrvReleaseObject(&(Buff)->Header, (IsConsoleLocked))
|
||||
|
||||
NTSTATUS ConDrvCreateScreenBuffer(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
|
||||
IN OUT PCONSOLE Console,
|
||||
IN ULONG BufferType,
|
||||
IN PVOID ScreenBufferInfo);
|
||||
IN PCONSOLE Console,
|
||||
IN HANDLE ProcessHandle OPTIONAL,
|
||||
IN ULONG BufferType,
|
||||
IN PVOID ScreenBufferInfo);
|
||||
VOID NTAPI ConDrvDeleteScreenBuffer(PCONSOLE_SCREEN_BUFFER Buffer);
|
||||
// VOID ConioSetActiveScreenBuffer(PCONSOLE_SCREEN_BUFFER Buffer);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue