[KERNEL32]

- Make some functions compliant with the new structures and server apis indices names.

[KERNEL32/CONSRV]
- Merge CSRSS_SET_CONSOLE_MODE and CSRSS_GET_CONSOLE_MODE into CSRSS_CONSOLE_MODE.
- Rename CSRSS_SETGET_CONSOLE_HW_STATE into CSRSS_CONSOLE_HW_STATE.

svn path=/branches/ros-csrss/; revision=57724
This commit is contained in:
Hermès Bélusca-Maïto 2012-11-17 23:07:59 +00:00
parent dab294603f
commit 56190eec33
3 changed files with 93 additions and 126 deletions

View file

@ -202,33 +202,34 @@ DuplicateConsoleHandle(HANDLE hConsole,
BOOL bInheritHandle, BOOL bInheritHandle,
DWORD dwOptions) DWORD dwOptions)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
PCSRSS_DUPLICATE_HANDLE DuplicateHandleRequest = &ApiMessage.Data.DuplicateHandleRequest;
if (dwOptions & ~(DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS) if ( (dwOptions & ~(DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) ||
|| (!(dwOptions & DUPLICATE_SAME_ACCESS) (!(dwOptions & DUPLICATE_SAME_ACCESS) &&
&& dwDesiredAccess & ~(GENERIC_READ | GENERIC_WRITE))) (dwDesiredAccess & ~(GENERIC_READ | GENERIC_WRITE))) )
{ {
SetLastError (ERROR_INVALID_PARAMETER); SetLastError (ERROR_INVALID_PARAMETER);
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
} }
Request.Data.DuplicateHandleRequest.Handle = hConsole; DuplicateHandleRequest->Handle = hConsole;
Request.Data.DuplicateHandleRequest.Access = dwDesiredAccess; DuplicateHandleRequest->Access = dwDesiredAccess;
Request.Data.DuplicateHandleRequest.Inheritable = bInheritHandle; DuplicateHandleRequest->Inheritable = bInheritHandle;
Request.Data.DuplicateHandleRequest.Options = dwOptions; DuplicateHandleRequest->Options = dwOptions;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_NATIVE, DUPLICATE_HANDLE), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepDuplicateHandle),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_DUPLICATE_HANDLE));
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status=Request.Status)) if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
{ {
BaseSetLastNTError(Status); BaseSetLastNTError(Status);
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
} }
return Request.Data.DuplicateHandleRequest.Handle; return DuplicateHandleRequest->Handle;
} }
@ -292,23 +293,23 @@ GetConsoleHardwareState(HANDLE hConsole,
DWORD Flags, DWORD Flags,
PDWORD State) PDWORD State)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
PCSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest = &ApiMessage.Data.ConsoleHardwareStateRequest;
Request.Data.ConsoleHardwareStateRequest.ConsoleHandle = hConsole; ConsoleHardwareStateRequest->ConsoleHandle = hConsole;
Request.Data.ConsoleHardwareStateRequest.SetGet = CONSOLE_HARDWARE_STATE_GET;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SETGET_CONSOLE_HW_STATE), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetHardwareState),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_CONSOLE_HW_STATE));
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
{ {
BaseSetLastNTError(Status); BaseSetLastNTError(Status);
return FALSE; return FALSE;
} }
*State = Request.Data.ConsoleHardwareStateRequest.State; *State = ConsoleHardwareStateRequest->State;
return TRUE; return TRUE;
} }
@ -498,18 +499,18 @@ SetConsoleHardwareState(HANDLE hConsole,
DWORD Flags, DWORD Flags,
DWORD State) DWORD State)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
PCSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest = &ApiMessage.Data.ConsoleHardwareStateRequest;
Request.Data.ConsoleHardwareStateRequest.ConsoleHandle = hConsole; ConsoleHardwareStateRequest->ConsoleHandle = hConsole;
Request.Data.ConsoleHardwareStateRequest.SetGet = CONSOLE_HARDWARE_STATE_SET; ConsoleHardwareStateRequest->State = State;
Request.Data.ConsoleHardwareStateRequest.State = State;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SETGET_CONSOLE_HW_STATE), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetHardwareState),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_CONSOLE_HW_STATE));
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
{ {
BaseSetLastNTError(Status); BaseSetLastNTError(Status);
return FALSE; return FALSE;
@ -910,22 +911,23 @@ WINAPI
GetConsoleMode(HANDLE hConsoleHandle, GetConsoleMode(HANDLE hConsoleHandle,
LPDWORD lpMode) LPDWORD lpMode)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
PCSRSS_CONSOLE_MODE ConsoleModeRequest = &ApiMessage.Data.ConsoleModeRequest;
Request.Data.GetConsoleModeRequest.ConsoleHandle = hConsoleHandle; ConsoleModeRequest->ConsoleHandle = hConsoleHandle;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_MODE), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetMode),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_CONSOLE_MODE));
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
{ {
BaseSetLastNTError(Status); BaseSetLastNTError(Status);
return FALSE; return FALSE;
} }
*lpMode = Request.Data.GetConsoleModeRequest.ConsoleMode; *lpMode = ConsoleModeRequest->ConsoleMode;
return TRUE; return TRUE;
} }
@ -1050,17 +1052,18 @@ WINAPI
SetConsoleMode(HANDLE hConsoleHandle, SetConsoleMode(HANDLE hConsoleHandle,
DWORD dwMode) DWORD dwMode)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
PCSRSS_CONSOLE_MODE ConsoleModeRequest = &ApiMessage.Data.ConsoleModeRequest;
Request.Data.SetConsoleModeRequest.ConsoleHandle = hConsoleHandle; ConsoleModeRequest->ConsoleHandle = hConsoleHandle;
Request.Data.SetConsoleModeRequest.Mode = dwMode; ConsoleModeRequest->ConsoleMode = dwMode;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CONSOLE_MODE), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetMode),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_CONSOLE_MODE));
if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
{ {
BaseSetLastNTError(Status); BaseSetLastNTError(Status);
return FALSE; return FALSE;

View file

@ -52,7 +52,7 @@ typedef enum _CONSRV_API_NUMBER
ConsolepReadConsole, ConsolepReadConsole,
ConsolepWriteConsole, ConsolepWriteConsole,
ConsolepDuplicateHandle, ConsolepDuplicateHandle,
/**/ ConsolepGetHandleInformation /**/, // ConsolepGetHandleInformation,
// ConsolepSetHandleInformation, // ConsolepSetHandleInformation,
ConsolepCloseHandle, ConsolepCloseHandle,
ConsolepVerifyIoHandle, ConsolepVerifyIoHandle,
@ -243,17 +243,11 @@ typedef struct
WORD Attrib; WORD Attrib;
} CSRSS_SET_ATTRIB, *PCSRSS_SET_ATTRIB; } CSRSS_SET_ATTRIB, *PCSRSS_SET_ATTRIB;
typedef struct
{
HANDLE ConsoleHandle;
DWORD Mode;
} CSRSS_SET_CONSOLE_MODE, *PCSRSS_SET_CONSOLE_MODE;
typedef struct typedef struct
{ {
HANDLE ConsoleHandle; HANDLE ConsoleHandle;
DWORD ConsoleMode; DWORD ConsoleMode;
} CSRSS_GET_CONSOLE_MODE, *PCSRSS_GET_CONSOLE_MODE; } CSRSS_CONSOLE_MODE, *PCSRSS_CONSOLE_MODE;
typedef struct typedef struct
{ {
@ -415,18 +409,18 @@ typedef struct
HANDLE InputWaitHandle; HANDLE InputWaitHandle;
} CSRSS_GET_INPUT_WAIT_HANDLE, *PCSRSS_GET_INPUT_WAIT_HANDLE; } CSRSS_GET_INPUT_WAIT_HANDLE, *PCSRSS_GET_INPUT_WAIT_HANDLE;
#define CONSOLE_HARDWARE_STATE_GET 0
#define CONSOLE_HARDWARE_STATE_SET 1
/*
* Console hardware states.
*/
#define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0 #define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0
#define CONSOLE_HARDWARE_STATE_DIRECT 1 #define CONSOLE_HARDWARE_STATE_DIRECT 1
typedef struct typedef struct
{ {
HANDLE ConsoleHandle; HANDLE ConsoleHandle;
DWORD SetGet; /* 0=get; 1=set */
DWORD State; DWORD State;
} CSRSS_SETGET_CONSOLE_HW_STATE, *PCSRSS_SETGET_CONSOLE_HW_STATE; } CSRSS_CONSOLE_HW_STATE, *PCSRSS_CONSOLE_HW_STATE;
typedef struct typedef struct
{ {
@ -607,9 +601,8 @@ typedef struct _CONSOLE_API_MESSAGE
CSRSS_GET_CONSOLE_SELECTION_INFO GetConsoleSelectionInfo; CSRSS_GET_CONSOLE_SELECTION_INFO GetConsoleSelectionInfo;
/* Console mode */ /* Console mode */
CSRSS_SET_CONSOLE_MODE SetConsoleModeRequest; CSRSS_CONSOLE_MODE ConsoleModeRequest;
CSRSS_GET_CONSOLE_MODE GetConsoleModeRequest; CSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest;
CSRSS_SETGET_CONSOLE_HW_STATE ConsoleHardwareStateRequest;
/* Console window */ /* Console window */
CSRSS_SET_TITLE SetTitleRequest; CSRSS_SET_TITLE SetTitleRequest;

View file

@ -463,28 +463,26 @@ ConioUnpause(PCSRSS_CONSOLE Console, UINT Flags)
CSR_API(SrvSetConsoleMode) CSR_API(SrvSetConsoleMode)
{ {
NTSTATUS Status; NTSTATUS Status;
PCSRSS_SET_CONSOLE_MODE SetConsoleModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetConsoleModeRequest; PCSRSS_CONSOLE_MODE ConsoleModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleModeRequest;
PCSRSS_CONSOLE Console; PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff; PCSRSS_SCREEN_BUFFER Buff;
DPRINT("SrvSetConsoleMode\n"); DPRINT("SrvSetConsoleMode\n");
Status = Win32CsrLockObject(CsrGetClientThread()->Process, Status = Win32CsrLockObject(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
SetConsoleModeRequest->ConsoleHandle, ConsoleModeRequest->ConsoleHandle,
(Object_t **) &Console, GENERIC_WRITE, 0); (Object_t **) &Console, GENERIC_WRITE, 0);
if (! NT_SUCCESS(Status)) if (!NT_SUCCESS(Status)) return Status;
{
return Status;
}
Buff = (PCSRSS_SCREEN_BUFFER)Console; Buff = (PCSRSS_SCREEN_BUFFER)Console;
if (CONIO_CONSOLE_MAGIC == Console->Header.Type) if (CONIO_CONSOLE_MAGIC == Console->Header.Type)
{ {
Console->Mode = SetConsoleModeRequest->Mode & CONSOLE_INPUT_MODE_VALID; Console->Mode = ConsoleModeRequest->ConsoleMode & CONSOLE_INPUT_MODE_VALID;
} }
else if (CONIO_SCREEN_BUFFER_MAGIC == Console->Header.Type) else if (CONIO_SCREEN_BUFFER_MAGIC == Console->Header.Type)
{ {
Buff->Mode = SetConsoleModeRequest->Mode & CONSOLE_OUTPUT_MODE_VALID; Buff->Mode = ConsoleModeRequest->ConsoleMode & CONSOLE_OUTPUT_MODE_VALID;
} }
else else
{ {
@ -499,27 +497,27 @@ CSR_API(SrvSetConsoleMode)
CSR_API(SrvGetConsoleMode) CSR_API(SrvGetConsoleMode)
{ {
NTSTATUS Status; NTSTATUS Status;
PCSRSS_GET_CONSOLE_MODE GetConsoleModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetConsoleModeRequest; PCSRSS_CONSOLE_MODE ConsoleModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleModeRequest;
PCSRSS_CONSOLE Console; PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff; PCSRSS_SCREEN_BUFFER Buff;
DPRINT("SrvGetConsoleMode\n"); DPRINT("SrvGetConsoleMode\n");
Status = Win32CsrLockObject(CsrGetClientThread()->Process, GetConsoleModeRequest->ConsoleHandle, Status = Win32CsrLockObject(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
ConsoleModeRequest->ConsoleHandle,
(Object_t **) &Console, GENERIC_READ, 0); (Object_t **) &Console, GENERIC_READ, 0);
if (! NT_SUCCESS(Status)) if (!NT_SUCCESS(Status)) return Status;
{
return Status;
}
Status = STATUS_SUCCESS; Status = STATUS_SUCCESS;
Buff = (PCSRSS_SCREEN_BUFFER) Console; Buff = (PCSRSS_SCREEN_BUFFER) Console;
if (CONIO_CONSOLE_MAGIC == Console->Header.Type) if (CONIO_CONSOLE_MAGIC == Console->Header.Type)
{ {
GetConsoleModeRequest->ConsoleMode = Console->Mode; ConsoleModeRequest->ConsoleMode = Console->Mode;
} }
else if (CONIO_SCREEN_BUFFER_MAGIC == Buff->Header.Type) else if (CONIO_SCREEN_BUFFER_MAGIC == Buff->Header.Type)
{ {
GetConsoleModeRequest->ConsoleMode = Buff->Mode; ConsoleModeRequest->ConsoleMode = Buff->Mode;
} }
else else
{ {
@ -614,18 +612,18 @@ CSR_API(SrvGetConsoleTitle)
} }
/********************************************************************** /**********************************************************************
* HardwareStateProperty * HardwareStateProperty
* *
* DESCRIPTION * DESCRIPTION
* Set/Get the value of the HardwareState and switch * Set/Get the value of the HardwareState and switch
* between direct video buffer ouput and GDI windowed * between direct video buffer ouput and GDI windowed
* output. * output.
* ARGUMENTS * ARGUMENTS
* Client hands us a CSRSS_CONSOLE_HARDWARE_STATE * Client hands us a CSRSS_CONSOLE_HARDWARE_STATE
* object. We use the same object to Request. * object. We use the same object to Request.
* NOTE * NOTE
* ConsoleHwState has the correct size to be compatible * ConsoleHwState has the correct size to be compatible
* with NT's, but values are not. * with NT's, but values are not.
*/ */
static NTSTATUS FASTCALL static NTSTATUS FASTCALL
SetConsoleHardwareState(PCSRSS_CONSOLE Console, DWORD ConsoleHwState) SetConsoleHardwareState(PCSRSS_CONSOLE Console, DWORD ConsoleHwState)
@ -650,37 +648,23 @@ SetConsoleHardwareState(PCSRSS_CONSOLE Console, DWORD ConsoleHwState)
CSR_API(SrvGetConsoleHardwareState) CSR_API(SrvGetConsoleHardwareState)
{ {
PCSRSS_SETGET_CONSOLE_HW_STATE ConsoleHardwareStateRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleHardwareStateRequest;
PCSRSS_CONSOLE Console;
NTSTATUS Status; NTSTATUS Status;
PCSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleHardwareStateRequest;
PCSRSS_CONSOLE Console;
DPRINT("SrvGetConsoleHardwareState\n"); DPRINT("SrvGetConsoleHardwareState\n");
Status = ConioLockConsole(CsrGetClientThread()->Process, Status = ConioLockConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
ConsoleHardwareStateRequest->ConsoleHandle, ConsoleHardwareStateRequest->ConsoleHandle,
&Console, &Console,
GENERIC_READ); GENERIC_READ);
if (! NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT1("Failed to get console handle in SetConsoleHardwareState\n"); DPRINT1("Failed to get console handle in SrvGetConsoleHardwareState\n");
return Status; return Status;
} }
switch (ConsoleHardwareStateRequest->SetGet) ConsoleHardwareStateRequest->State = Console->HardwareState;
{
case CONSOLE_HARDWARE_STATE_GET:
ConsoleHardwareStateRequest->State = Console->HardwareState;
break;
case CONSOLE_HARDWARE_STATE_SET:
DPRINT("Setting console hardware state.\n");
Status = SetConsoleHardwareState(Console, ConsoleHardwareStateRequest->State);
break;
default:
Status = STATUS_INVALID_PARAMETER_2; /* Client: (handle, [set_get], mode) */
break;
}
ConioUnlockConsole(Console); ConioUnlockConsole(Console);
@ -689,37 +673,24 @@ CSR_API(SrvGetConsoleHardwareState)
CSR_API(SrvSetConsoleHardwareState) CSR_API(SrvSetConsoleHardwareState)
{ {
PCSRSS_SETGET_CONSOLE_HW_STATE ConsoleHardwareStateRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleHardwareStateRequest;
PCSRSS_CONSOLE Console;
NTSTATUS Status; NTSTATUS Status;
PCSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleHardwareStateRequest;
PCSRSS_CONSOLE Console;
DPRINT("SrvSetConsoleHardwareState\n"); DPRINT("SrvSetConsoleHardwareState\n");
Status = ConioLockConsole(CsrGetClientThread()->Process, Status = ConioLockConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
ConsoleHardwareStateRequest->ConsoleHandle, ConsoleHardwareStateRequest->ConsoleHandle,
&Console, &Console,
GENERIC_READ); GENERIC_READ);
if (! NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT1("Failed to get console handle in SetConsoleHardwareState\n"); DPRINT1("Failed to get console handle in SrvSetConsoleHardwareState\n");
return Status; return Status;
} }
switch (ConsoleHardwareStateRequest->SetGet) DPRINT("Setting console hardware state.\n");
{ Status = SetConsoleHardwareState(Console, ConsoleHardwareStateRequest->State);
case CONSOLE_HARDWARE_STATE_GET:
ConsoleHardwareStateRequest->State = Console->HardwareState;
break;
case CONSOLE_HARDWARE_STATE_SET:
DPRINT("Setting console hardware state.\n");
Status = SetConsoleHardwareState(Console, ConsoleHardwareStateRequest->State);
break;
default:
Status = STATUS_INVALID_PARAMETER_2; /* Client: (handle, [set_get], mode) */
break;
}
ConioUnlockConsole(Console); ConioUnlockConsole(Console);