mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 08:55:19 +00:00
[KERNEL32][CONSRV]
Make kernel32 / winsrv console CSR structures Win2k3-compliant. The aim is to be able to put our kernel32.dll or winsrv.dll on win2k3, and vice-versa. Most of the changes consist in: - adding a HANDLE ConsoleHandle; to the structures, representing the console handle of the current application; - reorganizing the order of the members in the different structures; - few structures need to hold a event handle because it appears that some APIs create a event handle to perform some sort of synchronization with the console server (this is totally unused at the moment). - Since CsrClientCallServer returns the value of ApiMessage.Status, then just use ApiMessage.Status instead of declaring another Status variable for querying the return value of CsrClientCallServer. Part 1/X Aside: The VerifyConsoleIoHandle winetest problem is solved here (see CORE-7941 for more details). CORE-7941 #resolved #comment Fixed in revision 62460, thanks :) CORE-7931 svn path=/trunk/; revision=62460
This commit is contained in:
parent
7647ccfb92
commit
a0c9db7610
15 changed files with 408 additions and 301 deletions
|
@ -252,17 +252,18 @@ ConsoleMenuControl(HANDLE hConsoleOutput,
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_MENUCONTROL MenuControlRequest = &ApiMessage.Data.MenuControlRequest;
|
PCONSOLE_MENUCONTROL MenuControlRequest = &ApiMessage.Data.MenuControlRequest;
|
||||||
|
|
||||||
MenuControlRequest->OutputHandle = hConsoleOutput;
|
MenuControlRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
MenuControlRequest->dwCmdIdLow = dwCmdIdLow;
|
MenuControlRequest->OutputHandle = hConsoleOutput;
|
||||||
MenuControlRequest->dwCmdIdHigh = dwCmdIdHigh;
|
MenuControlRequest->CmdIdLow = dwCmdIdLow;
|
||||||
MenuControlRequest->hMenu = NULL;
|
MenuControlRequest->CmdIdHigh = dwCmdIdHigh;
|
||||||
|
MenuControlRequest->MenuHandle = NULL;
|
||||||
|
|
||||||
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepMenuControl),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepMenuControl),
|
||||||
sizeof(CONSOLE_MENUCONTROL));
|
sizeof(*MenuControlRequest));
|
||||||
|
|
||||||
return MenuControlRequest->hMenu;
|
return MenuControlRequest->MenuHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -314,7 +315,6 @@ BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
GetConsoleDisplayMode(LPDWORD lpModeFlags)
|
GetConsoleDisplayMode(LPDWORD lpModeFlags)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_GETDISPLAYMODE GetDisplayModeRequest = &ApiMessage.Data.GetDisplayModeRequest;
|
PCONSOLE_GETDISPLAYMODE GetDisplayModeRequest = &ApiMessage.Data.GetDisplayModeRequest;
|
||||||
|
|
||||||
|
@ -324,19 +324,19 @@ GetConsoleDisplayMode(LPDWORD lpModeFlags)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDisplayModeRequest->OutputHandle = hConsoleOutput;
|
GetDisplayModeRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetDisplayMode),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetDisplayMode),
|
||||||
sizeof(CONSOLE_GETDISPLAYMODE));
|
sizeof(*GetDisplayModeRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
*lpModeFlags = GetDisplayModeRequest->DisplayMode;
|
*lpModeFlags = GetDisplayModeRequest->DisplayMode; // ModeFlags
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,33 +378,34 @@ GetConsoleFontSize(HANDLE hConsoleOutput,
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
GetConsoleHardwareState(HANDLE hConsoleOutput,
|
GetConsoleHardwareState(HANDLE hConsoleOutput,
|
||||||
DWORD Flags,
|
PDWORD Flags,
|
||||||
PDWORD State)
|
PDWORD State)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_GETSETHWSTATE HardwareStateRequest = &ApiMessage.Data.HardwareStateRequest;
|
PCONSOLE_GETSETHWSTATE HardwareStateRequest = &ApiMessage.Data.HardwareStateRequest;
|
||||||
|
|
||||||
DPRINT1("GetConsoleHardwareState(%lu, 0x%p) UNIMPLEMENTED!\n", Flags, State);
|
DPRINT1("GetConsoleHardwareState(%lu, 0x%p) UNIMPLEMENTED!\n", Flags, State);
|
||||||
|
|
||||||
if (State == NULL)
|
if (Flags == NULL || State == NULL)
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
HardwareStateRequest->OutputHandle = hConsoleOutput;
|
HardwareStateRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
|
HardwareStateRequest->OutputHandle = hConsoleOutput;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetHardwareState),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetHardwareState),
|
||||||
sizeof(CONSOLE_GETSETHWSTATE));
|
sizeof(*HardwareStateRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*Flags = HardwareStateRequest->Flags;
|
||||||
*State = HardwareStateRequest->State;
|
*State = HardwareStateRequest->State;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -458,7 +459,6 @@ WINAPI
|
||||||
InvalidateConsoleDIBits(IN HANDLE hConsoleOutput,
|
InvalidateConsoleDIBits(IN HANDLE hConsoleOutput,
|
||||||
IN PSMALL_RECT lpRect)
|
IN PSMALL_RECT lpRect)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_INVALIDATEDIBITS InvalidateDIBitsRequest = &ApiMessage.Data.InvalidateDIBitsRequest;
|
PCONSOLE_INVALIDATEDIBITS InvalidateDIBitsRequest = &ApiMessage.Data.InvalidateDIBitsRequest;
|
||||||
|
|
||||||
|
@ -468,16 +468,17 @@ InvalidateConsoleDIBits(IN HANDLE hConsoleOutput,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
InvalidateDIBitsRequest->OutputHandle = hConsoleOutput;
|
InvalidateDIBitsRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
InvalidateDIBitsRequest->Region = *lpRect;
|
InvalidateDIBitsRequest->OutputHandle = hConsoleOutput;
|
||||||
|
InvalidateDIBitsRequest->Region = *lpRect;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepInvalidateBitMapRect),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepInvalidateBitMapRect),
|
||||||
sizeof(CONSOLE_INVALIDATEDIBITS));
|
sizeof(*InvalidateDIBitsRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -546,23 +547,23 @@ OpenConsoleW(LPCWSTR wsName,
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleCursor(HANDLE hConsoleOutput,
|
SetConsoleCursor(HANDLE hConsoleOutput,
|
||||||
HCURSOR hCursor)
|
HCURSOR hCursor)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_SETCURSOR SetCursorRequest = &ApiMessage.Data.SetCursorRequest;
|
PCONSOLE_SETCURSOR SetCursorRequest = &ApiMessage.Data.SetCursorRequest;
|
||||||
|
|
||||||
SetCursorRequest->OutputHandle = hConsoleOutput;
|
SetCursorRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
SetCursorRequest->hCursor = hCursor;
|
SetCursorRequest->OutputHandle = hConsoleOutput;
|
||||||
|
SetCursorRequest->CursorHandle = hCursor;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCursor),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCursor),
|
||||||
sizeof(CONSOLE_SETCURSOR));
|
sizeof(*SetCursorRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -576,25 +577,26 @@ SetConsoleCursor(HANDLE hConsoleOutput,
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleDisplayMode(HANDLE hConsoleOutput,
|
SetConsoleDisplayMode(HANDLE hConsoleOutput,
|
||||||
DWORD dwFlags,
|
DWORD dwFlags, // dwModeFlags
|
||||||
PCOORD lpNewScreenBufferDimensions)
|
PCOORD lpNewScreenBufferDimensions)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_SETDISPLAYMODE SetDisplayModeRequest = &ApiMessage.Data.SetDisplayModeRequest;
|
PCONSOLE_SETDISPLAYMODE SetDisplayModeRequest = &ApiMessage.Data.SetDisplayModeRequest;
|
||||||
|
|
||||||
SetDisplayModeRequest->OutputHandle = hConsoleOutput;
|
SetDisplayModeRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
SetDisplayModeRequest->DisplayMode = dwFlags;
|
SetDisplayModeRequest->OutputHandle = hConsoleOutput;
|
||||||
SetDisplayModeRequest->NewSBDim.X = 0;
|
SetDisplayModeRequest->DisplayMode = dwFlags; // ModeFlags ; dwModeFlags
|
||||||
SetDisplayModeRequest->NewSBDim.Y = 0;
|
SetDisplayModeRequest->NewSBDim.X = 0;
|
||||||
|
SetDisplayModeRequest->NewSBDim.Y = 0;
|
||||||
|
/* SetDisplayModeRequest->EventHandle; */
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetDisplayMode),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetDisplayMode),
|
||||||
sizeof(CONSOLE_SETDISPLAYMODE));
|
sizeof(*SetDisplayModeRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -628,22 +630,23 @@ SetConsoleHardwareState(HANDLE hConsoleOutput,
|
||||||
DWORD Flags,
|
DWORD Flags,
|
||||||
DWORD State)
|
DWORD State)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_GETSETHWSTATE HardwareStateRequest = &ApiMessage.Data.HardwareStateRequest;
|
PCONSOLE_GETSETHWSTATE HardwareStateRequest = &ApiMessage.Data.HardwareStateRequest;
|
||||||
|
|
||||||
DPRINT1("SetConsoleHardwareState(%lu, %lu) UNIMPLEMENTED!\n", Flags, State);
|
DPRINT1("SetConsoleHardwareState(%lu, %lu) UNIMPLEMENTED!\n", Flags, State);
|
||||||
|
|
||||||
HardwareStateRequest->OutputHandle = hConsoleOutput;
|
HardwareStateRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
HardwareStateRequest->State = State;
|
HardwareStateRequest->OutputHandle = hConsoleOutput;
|
||||||
|
HardwareStateRequest->Flags = Flags;
|
||||||
|
HardwareStateRequest->State = State;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetHardwareState),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetHardwareState),
|
||||||
sizeof(CONSOLE_GETSETHWSTATE));
|
sizeof(*HardwareStateRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -690,19 +693,19 @@ BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleMenuClose(BOOL bEnable)
|
SetConsoleMenuClose(BOOL bEnable)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_SETMENUCLOSE SetMenuCloseRequest = &ApiMessage.Data.SetMenuCloseRequest;
|
PCONSOLE_SETMENUCLOSE SetMenuCloseRequest = &ApiMessage.Data.SetMenuCloseRequest;
|
||||||
|
|
||||||
SetMenuCloseRequest->Enable = bEnable;
|
SetMenuCloseRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
|
SetMenuCloseRequest->Enable = bEnable;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetMenuClose),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetMenuClose),
|
||||||
sizeof(CONSOLE_SETMENUCLOSE));
|
sizeof(*SetMenuCloseRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -721,21 +724,21 @@ SetConsolePalette(HANDLE hConsoleOutput,
|
||||||
HPALETTE hPalette,
|
HPALETTE hPalette,
|
||||||
UINT dwUsage)
|
UINT dwUsage)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_SETPALETTE SetPaletteRequest = &ApiMessage.Data.SetPaletteRequest;
|
PCONSOLE_SETPALETTE SetPaletteRequest = &ApiMessage.Data.SetPaletteRequest;
|
||||||
|
|
||||||
|
SetPaletteRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
SetPaletteRequest->OutputHandle = hConsoleOutput;
|
SetPaletteRequest->OutputHandle = hConsoleOutput;
|
||||||
SetPaletteRequest->PaletteHandle = hPalette;
|
SetPaletteRequest->PaletteHandle = hPalette;
|
||||||
SetPaletteRequest->Usage = dwUsage;
|
SetPaletteRequest->Usage = dwUsage;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetPalette),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetPalette),
|
||||||
sizeof(CONSOLE_SETPALETTE));
|
sizeof(*SetPaletteRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -754,14 +757,15 @@ ShowConsoleCursor(HANDLE hConsoleOutput,
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_SHOWCURSOR ShowCursorRequest = &ApiMessage.Data.ShowCursorRequest;
|
PCONSOLE_SHOWCURSOR ShowCursorRequest = &ApiMessage.Data.ShowCursorRequest;
|
||||||
|
|
||||||
ShowCursorRequest->OutputHandle = hConsoleOutput;
|
ShowCursorRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
ShowCursorRequest->Show = bShow;
|
ShowCursorRequest->OutputHandle = hConsoleOutput;
|
||||||
ShowCursorRequest->RefCount = 0;
|
ShowCursorRequest->Show = bShow;
|
||||||
|
ShowCursorRequest->RefCount = 0;
|
||||||
|
|
||||||
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepShowCursor),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepShowCursor),
|
||||||
sizeof(CONSOLE_SHOWCURSOR));
|
sizeof(*ShowCursorRequest));
|
||||||
|
|
||||||
return ShowCursorRequest->RefCount;
|
return ShowCursorRequest->RefCount;
|
||||||
}
|
}
|
||||||
|
@ -771,10 +775,10 @@ ShowConsoleCursor(HANDLE hConsoleOutput,
|
||||||
* FUNCTION: Checks whether the given handle is a valid console handle.
|
* FUNCTION: Checks whether the given handle is a valid console handle.
|
||||||
*
|
*
|
||||||
* ARGUMENTS:
|
* ARGUMENTS:
|
||||||
* Handle - Handle to be checked
|
* hIoHandle - Handle to be checked.
|
||||||
*
|
*
|
||||||
* RETURNS:
|
* RETURNS:
|
||||||
* TRUE: Handle is a valid console handle
|
* TRUE : Handle is a valid console handle.
|
||||||
* FALSE: Handle is not a valid console handle.
|
* FALSE: Handle is not a valid console handle.
|
||||||
*
|
*
|
||||||
* STATUS: Officially undocumented
|
* STATUS: Officially undocumented
|
||||||
|
@ -783,24 +787,29 @@ ShowConsoleCursor(HANDLE hConsoleOutput,
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
VerifyConsoleIoHandle(HANDLE Handle)
|
VerifyConsoleIoHandle(HANDLE hIoHandle)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCONSOLE_VERIFYHANDLE VerifyHandleRequest = &ApiMessage.Data.VerifyHandleRequest;
|
||||||
|
|
||||||
ApiMessage.Data.VerifyHandleRequest.ConsoleHandle = Handle;
|
VerifyHandleRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
|
VerifyHandleRequest->Handle = hIoHandle;
|
||||||
|
VerifyHandleRequest->IsValid = FALSE;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
/* If the process is not attached to a console, return invalid handle */
|
||||||
NULL,
|
if (VerifyHandleRequest->ConsoleHandle == NULL) return FALSE;
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepVerifyIoHandle),
|
|
||||||
sizeof(CONSOLE_VERIFYHANDLE));
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
if (!NT_SUCCESS(Status))
|
NULL,
|
||||||
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepVerifyIoHandle),
|
||||||
|
sizeof(*VerifyHandleRequest));
|
||||||
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return VerifyHandleRequest->IsValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -809,20 +818,21 @@ VerifyConsoleIoHandle(HANDLE Handle)
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
CloseConsoleHandle(HANDLE Handle)
|
CloseConsoleHandle(HANDLE hHandle)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCONSOLE_CLOSEHANDLE CloseHandleRequest = &ApiMessage.Data.CloseHandleRequest;
|
||||||
|
|
||||||
ApiMessage.Data.CloseHandleRequest.ConsoleHandle = Handle;
|
CloseHandleRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
|
CloseHandleRequest->Handle = hHandle;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepCloseHandle),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepCloseHandle),
|
||||||
sizeof(CONSOLE_CLOSEHANDLE));
|
sizeof(*CloseHandleRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -848,21 +858,27 @@ GetStdHandle(DWORD nStdHandle)
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
PRTL_USER_PROCESS_PARAMETERS Ppb = NtCurrentPeb()->ProcessParameters;
|
PRTL_USER_PROCESS_PARAMETERS Ppb = NtCurrentPeb()->ProcessParameters;
|
||||||
|
HANDLE Handle = INVALID_HANDLE_VALUE;
|
||||||
|
|
||||||
switch (nStdHandle)
|
switch (nStdHandle)
|
||||||
{
|
{
|
||||||
case STD_INPUT_HANDLE:
|
case STD_INPUT_HANDLE:
|
||||||
return Ppb->StandardInput;
|
Handle = Ppb->StandardInput;
|
||||||
|
break;
|
||||||
|
|
||||||
case STD_OUTPUT_HANDLE:
|
case STD_OUTPUT_HANDLE:
|
||||||
return Ppb->StandardOutput;
|
Handle = Ppb->StandardOutput;
|
||||||
|
break;
|
||||||
|
|
||||||
case STD_ERROR_HANDLE:
|
case STD_ERROR_HANDLE:
|
||||||
return Ppb->StandardError;
|
Handle = Ppb->StandardError;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetLastError(ERROR_INVALID_HANDLE);
|
/* If the returned handle is invalid, set last error */
|
||||||
return INVALID_HANDLE_VALUE;
|
if (Handle == INVALID_HANDLE_VALUE) SetLastError(ERROR_INVALID_HANDLE);
|
||||||
|
|
||||||
|
return Handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -871,7 +887,7 @@ GetStdHandle(DWORD nStdHandle)
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetStdHandle(DWORD nStdHandle,
|
SetStdHandle(DWORD nStdHandle,
|
||||||
HANDLE hHandle)
|
HANDLE hHandle)
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Set the handle for the standard input, standard output or
|
* FUNCTION: Set the handle for the standard input, standard output or
|
||||||
|
@ -886,7 +902,7 @@ SetStdHandle(DWORD nStdHandle,
|
||||||
{
|
{
|
||||||
PRTL_USER_PROCESS_PARAMETERS Ppb = NtCurrentPeb()->ProcessParameters;
|
PRTL_USER_PROCESS_PARAMETERS Ppb = NtCurrentPeb()->ProcessParameters;
|
||||||
|
|
||||||
/* no need to check if hHandle == INVALID_HANDLE_VALUE */
|
/* No need to check if hHandle == INVALID_HANDLE_VALUE */
|
||||||
|
|
||||||
switch (nStdHandle)
|
switch (nStdHandle)
|
||||||
{
|
{
|
||||||
|
@ -903,7 +919,7 @@ SetStdHandle(DWORD nStdHandle,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Windows for whatever reason sets the last error to ERROR_INVALID_HANDLE here */
|
/* nStdHandle was invalid, bail out */
|
||||||
SetLastError(ERROR_INVALID_HANDLE);
|
SetLastError(ERROR_INVALID_HANDLE);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1021,8 +1037,8 @@ WINAPI
|
||||||
GetConsoleScreenBufferInfo(HANDLE hConsoleOutput,
|
GetConsoleScreenBufferInfo(HANDLE hConsoleOutput,
|
||||||
PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo)
|
PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCONSOLE_GETSCREENBUFFERINFO ScreenBufferInfoRequest = &ApiMessage.Data.ScreenBufferInfoRequest;
|
||||||
|
|
||||||
if (lpConsoleScreenBufferInfo == NULL)
|
if (lpConsoleScreenBufferInfo == NULL)
|
||||||
{
|
{
|
||||||
|
@ -1030,19 +1046,27 @@ GetConsoleScreenBufferInfo(HANDLE hConsoleOutput,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ApiMessage.Data.ScreenBufferInfoRequest.OutputHandle = hConsoleOutput;
|
ScreenBufferInfoRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
|
ScreenBufferInfoRequest->OutputHandle = hConsoleOutput;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetScreenBufferInfo),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetScreenBufferInfo),
|
||||||
sizeof(CONSOLE_GETSCREENBUFFERINFO));
|
sizeof(*ScreenBufferInfoRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
*lpConsoleScreenBufferInfo = ApiMessage.Data.ScreenBufferInfoRequest.Info;
|
lpConsoleScreenBufferInfo->dwSize = ScreenBufferInfoRequest->ScreenBufferSize;
|
||||||
|
lpConsoleScreenBufferInfo->dwCursorPosition = ScreenBufferInfoRequest->CursorPosition;
|
||||||
|
lpConsoleScreenBufferInfo->wAttributes = ScreenBufferInfoRequest->Attributes;
|
||||||
|
lpConsoleScreenBufferInfo->srWindow.Left = ScreenBufferInfoRequest->ViewOrigin.X;
|
||||||
|
lpConsoleScreenBufferInfo->srWindow.Top = ScreenBufferInfoRequest->ViewOrigin.Y;
|
||||||
|
lpConsoleScreenBufferInfo->srWindow.Right = ScreenBufferInfoRequest->ViewOrigin.X + ScreenBufferInfoRequest->ViewSize.X - 1;
|
||||||
|
lpConsoleScreenBufferInfo->srWindow.Bottom = ScreenBufferInfoRequest->ViewOrigin.Y + ScreenBufferInfoRequest->ViewSize.Y - 1;
|
||||||
|
lpConsoleScreenBufferInfo->dwMaximumWindowSize = ScreenBufferInfoRequest->MaximumViewSize;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1932,21 +1956,24 @@ UINT
|
||||||
WINAPI
|
WINAPI
|
||||||
GetConsoleCP(VOID)
|
GetConsoleCP(VOID)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest = &ApiMessage.Data.GetConsoleCPRequest;
|
||||||
|
|
||||||
/* Get the Input Code Page */
|
/* Get the Input Code Page */
|
||||||
ApiMessage.Data.ConsoleCPRequest.InputCP = TRUE;
|
GetConsoleCPRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
ApiMessage.Data.ConsoleCPRequest.CodePage = 0;
|
GetConsoleCPRequest->OutputCP = FALSE;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetCP),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetCP),
|
||||||
sizeof(CONSOLE_GETSETINPUTOUTPUTCP));
|
sizeof(*GetConsoleCPRequest));
|
||||||
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
|
{
|
||||||
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status)) BaseSetLastNTError(Status);
|
return GetConsoleCPRequest->CodePage;
|
||||||
|
|
||||||
return ApiMessage.Data.ConsoleCPRequest.CodePage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1959,21 +1986,26 @@ BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleCP(UINT wCodePageID)
|
SetConsoleCP(UINT wCodePageID)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest = &ApiMessage.Data.SetConsoleCPRequest;
|
||||||
|
|
||||||
/* Set the Input Code Page */
|
/* Set the Input Code Page */
|
||||||
ApiMessage.Data.ConsoleCPRequest.InputCP = TRUE;
|
SetConsoleCPRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
ApiMessage.Data.ConsoleCPRequest.CodePage = wCodePageID;
|
SetConsoleCPRequest->CodePage = wCodePageID;
|
||||||
|
SetConsoleCPRequest->OutputCP = FALSE;
|
||||||
|
/* SetConsoleCPRequest->EventHandle; */
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCP),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCP),
|
||||||
sizeof(CONSOLE_GETSETINPUTOUTPUTCP));
|
sizeof(*SetConsoleCPRequest));
|
||||||
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
|
{
|
||||||
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status)) BaseSetLastNTError(Status);
|
return TRUE;
|
||||||
|
|
||||||
return NT_SUCCESS(Status);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1986,21 +2018,24 @@ UINT
|
||||||
WINAPI
|
WINAPI
|
||||||
GetConsoleOutputCP(VOID)
|
GetConsoleOutputCP(VOID)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest = &ApiMessage.Data.GetConsoleCPRequest;
|
||||||
|
|
||||||
/* Get the Output Code Page */
|
/* Get the Output Code Page */
|
||||||
ApiMessage.Data.ConsoleCPRequest.InputCP = FALSE;
|
GetConsoleCPRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
ApiMessage.Data.ConsoleCPRequest.CodePage = 0;
|
GetConsoleCPRequest->OutputCP = TRUE;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetCP),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetCP),
|
||||||
sizeof(CONSOLE_GETSETINPUTOUTPUTCP));
|
sizeof(*GetConsoleCPRequest));
|
||||||
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
|
{
|
||||||
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status)) BaseSetLastNTError(Status);
|
return GetConsoleCPRequest->CodePage;
|
||||||
|
|
||||||
return ApiMessage.Data.ConsoleCPRequest.CodePage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2013,21 +2048,26 @@ BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleOutputCP(UINT wCodePageID)
|
SetConsoleOutputCP(UINT wCodePageID)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest = &ApiMessage.Data.SetConsoleCPRequest;
|
||||||
|
|
||||||
/* Set the Output Code Page */
|
/* Set the Output Code Page */
|
||||||
ApiMessage.Data.ConsoleCPRequest.InputCP = FALSE;
|
SetConsoleCPRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
ApiMessage.Data.ConsoleCPRequest.CodePage = wCodePageID;
|
SetConsoleCPRequest->CodePage = wCodePageID;
|
||||||
|
SetConsoleCPRequest->OutputCP = TRUE;
|
||||||
|
/* SetConsoleCPRequest->EventHandle; */
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCP),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCP),
|
||||||
sizeof(CONSOLE_GETSETINPUTOUTPUTCP));
|
sizeof(*SetConsoleCPRequest));
|
||||||
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
|
{
|
||||||
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status)) BaseSetLastNTError(Status);
|
return TRUE;
|
||||||
|
|
||||||
return NT_SUCCESS(Status);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2041,11 +2081,10 @@ WINAPI
|
||||||
GetConsoleProcessList(LPDWORD lpdwProcessList,
|
GetConsoleProcessList(LPDWORD lpdwProcessList,
|
||||||
DWORD dwProcessCount)
|
DWORD dwProcessCount)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
PCONSOLE_GETPROCESSLIST GetProcessListRequest = &ApiMessage.Data.GetProcessListRequest;
|
PCONSOLE_GETPROCESSLIST GetProcessListRequest = &ApiMessage.Data.GetProcessListRequest;
|
||||||
PCSR_CAPTURE_BUFFER CaptureBuffer;
|
PCSR_CAPTURE_BUFFER CaptureBuffer;
|
||||||
ULONG nProcesses;
|
ULONG nProcesses = 0;
|
||||||
|
|
||||||
if (lpdwProcessList == NULL || dwProcessCount == 0)
|
if (lpdwProcessList == NULL || dwProcessCount == 0)
|
||||||
{
|
{
|
||||||
|
@ -2058,30 +2097,30 @@ GetConsoleProcessList(LPDWORD lpdwProcessList,
|
||||||
{
|
{
|
||||||
DPRINT1("CsrAllocateCaptureBuffer failed!\n");
|
DPRINT1("CsrAllocateCaptureBuffer failed!\n");
|
||||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
return FALSE;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetProcessListRequest->nMaxIds = dwProcessCount;
|
GetProcessListRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
|
GetProcessListRequest->ProcessCount = dwProcessCount;
|
||||||
|
|
||||||
CsrAllocateMessagePointer(CaptureBuffer,
|
CsrAllocateMessagePointer(CaptureBuffer,
|
||||||
dwProcessCount * sizeof(DWORD),
|
dwProcessCount * sizeof(DWORD),
|
||||||
(PVOID*)&GetProcessListRequest->pProcessIds);
|
(PVOID*)&GetProcessListRequest->ProcessIdsList);
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
CaptureBuffer,
|
CaptureBuffer,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetProcessList),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetProcessList),
|
||||||
sizeof(CONSOLE_GETPROCESSLIST));
|
sizeof(*GetProcessListRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError (Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
nProcesses = 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nProcesses = GetProcessListRequest->nProcessIdsTotal;
|
nProcesses = GetProcessListRequest->ProcessCount;
|
||||||
if (dwProcessCount >= nProcesses)
|
if (dwProcessCount >= nProcesses)
|
||||||
{
|
{
|
||||||
memcpy(lpdwProcessList, GetProcessListRequest->pProcessIds, nProcesses * sizeof(DWORD));
|
memcpy(lpdwProcessList, GetProcessListRequest->ProcessIdsList, nProcesses * sizeof(DWORD));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2099,8 +2138,8 @@ BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
GetConsoleSelectionInfo(PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo)
|
GetConsoleSelectionInfo(PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCONSOLE_GETSELECTIONINFO GetSelectionInfoRequest = &ApiMessage.Data.GetSelectionInfoRequest;
|
||||||
|
|
||||||
if (lpConsoleSelectionInfo == NULL)
|
if (lpConsoleSelectionInfo == NULL)
|
||||||
{
|
{
|
||||||
|
@ -2108,17 +2147,19 @@ GetConsoleSelectionInfo(PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
GetSelectionInfoRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
NULL,
|
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetSelectionInfo),
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
sizeof(CONSOLE_GETSELECTIONINFO));
|
NULL,
|
||||||
if (!NT_SUCCESS(Status))
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetSelectionInfo),
|
||||||
|
sizeof(*GetSelectionInfoRequest));
|
||||||
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
*lpConsoleSelectionInfo = ApiMessage.Data.GetSelectionInfoRequest.Info;
|
*lpConsoleSelectionInfo = GetSelectionInfoRequest->Info;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2183,20 +2224,22 @@ HWND
|
||||||
WINAPI
|
WINAPI
|
||||||
GetConsoleWindow(VOID)
|
GetConsoleWindow(VOID)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCONSOLE_GETWINDOW GetWindowRequest = &ApiMessage.Data.GetWindowRequest;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
GetWindowRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
NULL,
|
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetConsoleWindow),
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
sizeof(CONSOLE_GETWINDOW));
|
NULL,
|
||||||
if (!NT_SUCCESS(Status))
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetConsoleWindow),
|
||||||
|
sizeof(*GetWindowRequest));
|
||||||
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return (HWND)NULL;
|
return (HWND)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiMessage.Data.GetWindowRequest.WindowHandle;
|
return GetWindowRequest->WindowHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2207,24 +2250,25 @@ GetConsoleWindow(VOID)
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleIcon(HICON hicon)
|
SetConsoleIcon(HICON hIcon)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
|
||||||
CONSOLE_API_MESSAGE ApiMessage;
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCONSOLE_SETICON SetIconRequest = &ApiMessage.Data.SetIconRequest;
|
||||||
|
|
||||||
ApiMessage.Data.SetIconRequest.WindowIcon = hicon;
|
SetIconRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
|
||||||
|
SetIconRequest->IconHandle = hIcon;
|
||||||
|
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetIcon),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetIcon),
|
||||||
sizeof(CONSOLE_SETICON));
|
sizeof(*SetIconRequest));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(ApiMessage.Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NT_SUCCESS(Status);
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -427,10 +427,10 @@ GetCurrentConsoleFont(
|
||||||
#if (_WIN32_WINNT >= 0x0500)
|
#if (_WIN32_WINNT >= 0x0500)
|
||||||
|
|
||||||
HWND WINAPI GetConsoleWindow(VOID);
|
HWND WINAPI GetConsoleWindow(VOID);
|
||||||
BOOL APIENTRY GetConsoleDisplayMode(_Out_ LPDWORD lpModeFlags);
|
BOOL WINAPI GetConsoleDisplayMode(_Out_ LPDWORD lpModeFlags);
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
APIENTRY
|
WINAPI
|
||||||
SetConsoleDisplayMode(
|
SetConsoleDisplayMode(
|
||||||
_In_ HANDLE hConsoleOutput,
|
_In_ HANDLE hConsoleOutput,
|
||||||
_In_ DWORD dwFlags,
|
_In_ DWORD dwFlags,
|
||||||
|
@ -607,8 +607,16 @@ BOOL WINAPI SetConsoleMenuClose(_In_ BOOL);
|
||||||
BOOL WINAPI SetConsoleCursor(_In_ HANDLE, _In_ HCURSOR);
|
BOOL WINAPI SetConsoleCursor(_In_ HANDLE, _In_ HCURSOR);
|
||||||
/* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/ShowConsoleCursor.php */
|
/* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/ShowConsoleCursor.php */
|
||||||
INT WINAPI ShowConsoleCursor(_In_ HANDLE, _In_ BOOL);
|
INT WINAPI ShowConsoleCursor(_In_ HANDLE, _In_ BOOL);
|
||||||
|
/* Undocumented */
|
||||||
|
BOOL WINAPI SetConsoleIcon(_In_ HICON);
|
||||||
/* Undocumented, see http://comments.gmane.org/gmane.comp.lang.harbour.devel/27844 */
|
/* Undocumented, see http://comments.gmane.org/gmane.comp.lang.harbour.devel/27844 */
|
||||||
BOOL WINAPI SetConsolePalette(_In_ HANDLE, _In_ HPALETTE, _In_ UINT);
|
BOOL WINAPI SetConsolePalette(_In_ HANDLE, _In_ HPALETTE, _In_ UINT);
|
||||||
|
/* Undocumented */
|
||||||
|
BOOL WINAPI CloseConsoleHandle(_In_ HANDLE);
|
||||||
|
// HANDLE WINAPI GetStdHandle(_In_ DWORD);
|
||||||
|
// BOOL WINAPI SetStdHandle(_In_ DWORD, _In_ HANDLE);
|
||||||
|
/* Undocumented */
|
||||||
|
BOOL WINAPI VerifyConsoleIoHandle(_In_ HANDLE);
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
|
|
|
@ -197,9 +197,9 @@ C_ASSERT(sizeof(CONSRV_API_CONNECTINFO) == 0x638);
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
ULONG nMaxIds;
|
HANDLE ConsoleHandle;
|
||||||
ULONG nProcessIdsTotal;
|
ULONG ProcessCount;
|
||||||
PDWORD pProcessIds;
|
PDWORD ProcessIdsList;
|
||||||
} CONSOLE_GETPROCESSLIST, *PCONSOLE_GETPROCESSLIST;
|
} CONSOLE_GETPROCESSLIST, *PCONSOLE_GETPROCESSLIST;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -262,8 +262,14 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
HANDLE ConsoleHandle;
|
||||||
HANDLE OutputHandle;
|
HANDLE OutputHandle;
|
||||||
CONSOLE_SCREEN_BUFFER_INFO Info;
|
COORD ScreenBufferSize;
|
||||||
|
COORD CursorPosition;
|
||||||
|
COORD ViewOrigin;
|
||||||
|
WORD Attributes;
|
||||||
|
COORD ViewSize;
|
||||||
|
COORD MaximumViewSize;
|
||||||
} CONSOLE_GETSCREENBUFFERINFO, *PCONSOLE_GETSCREENBUFFERINFO;
|
} CONSOLE_GETSCREENBUFFERINFO, *PCONSOLE_GETSCREENBUFFERINFO;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -274,6 +280,7 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
HANDLE ConsoleHandle;
|
||||||
HANDLE OutputHandle;
|
HANDLE OutputHandle;
|
||||||
BOOL Show;
|
BOOL Show;
|
||||||
INT RefCount;
|
INT RefCount;
|
||||||
|
@ -281,8 +288,9 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
HANDLE ConsoleHandle;
|
||||||
HANDLE OutputHandle;
|
HANDLE OutputHandle;
|
||||||
HCURSOR hCursor;
|
HCURSOR CursorHandle;
|
||||||
} CONSOLE_SETCURSOR, *PCONSOLE_SETCURSOR;
|
} CONSOLE_SETCURSOR, *PCONSOLE_SETCURSOR;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -305,15 +313,17 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
// HANDLE OutputHandle;
|
HANDLE ConsoleHandle;
|
||||||
DWORD DisplayMode;
|
DWORD DisplayMode; // ModeFlags
|
||||||
} CONSOLE_GETDISPLAYMODE, *PCONSOLE_GETDISPLAYMODE;
|
} CONSOLE_GETDISPLAYMODE, *PCONSOLE_GETDISPLAYMODE;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
HANDLE ConsoleHandle;
|
||||||
HANDLE OutputHandle;
|
HANDLE OutputHandle;
|
||||||
DWORD DisplayMode;
|
DWORD DisplayMode; // ModeFlags
|
||||||
COORD NewSBDim;
|
COORD NewSBDim;
|
||||||
|
HANDLE EventHandle;
|
||||||
} CONSOLE_SETDISPLAYMODE, *PCONSOLE_SETDISPLAYMODE;
|
} CONSOLE_SETDISPLAYMODE, *PCONSOLE_SETDISPLAYMODE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -324,7 +334,9 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
HANDLE ConsoleHandle;
|
||||||
HANDLE OutputHandle;
|
HANDLE OutputHandle;
|
||||||
|
DWORD Flags;
|
||||||
DWORD State;
|
DWORD State;
|
||||||
} CONSOLE_GETSETHWSTATE, *PCONSOLE_GETSETHWSTATE;
|
} CONSOLE_GETSETHWSTATE, *PCONSOLE_GETSETHWSTATE;
|
||||||
|
|
||||||
|
@ -351,12 +363,14 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
HANDLE ConsoleHandle;
|
||||||
HANDLE OutputHandle;
|
HANDLE OutputHandle;
|
||||||
SMALL_RECT Region;
|
SMALL_RECT Region;
|
||||||
} CONSOLE_INVALIDATEDIBITS, *PCONSOLE_INVALIDATEDIBITS;
|
} CONSOLE_INVALIDATEDIBITS, *PCONSOLE_INVALIDATEDIBITS;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
HANDLE ConsoleHandle;
|
||||||
HANDLE OutputHandle;
|
HANDLE OutputHandle;
|
||||||
HPALETTE PaletteHandle;
|
HPALETTE PaletteHandle;
|
||||||
UINT Usage;
|
UINT Usage;
|
||||||
|
@ -501,11 +515,14 @@ typedef struct
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
HANDLE ConsoleHandle;
|
HANDLE ConsoleHandle;
|
||||||
|
HANDLE Handle;
|
||||||
} CONSOLE_CLOSEHANDLE, *PCONSOLE_CLOSEHANDLE;
|
} CONSOLE_CLOSEHANDLE, *PCONSOLE_CLOSEHANDLE;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
BOOL IsValid;
|
||||||
HANDLE ConsoleHandle;
|
HANDLE ConsoleHandle;
|
||||||
|
HANDLE Handle;
|
||||||
} CONSOLE_VERIFYHANDLE, *PCONSOLE_VERIFYHANDLE;
|
} CONSOLE_VERIFYHANDLE, *PCONSOLE_VERIFYHANDLE;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -543,15 +560,17 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
HANDLE ConsoleHandle;
|
||||||
HANDLE OutputHandle;
|
HANDLE OutputHandle;
|
||||||
DWORD dwCmdIdLow;
|
DWORD CmdIdLow;
|
||||||
DWORD dwCmdIdHigh;
|
DWORD CmdIdHigh;
|
||||||
HMENU hMenu;
|
HMENU MenuHandle;
|
||||||
} CONSOLE_MENUCONTROL, *PCONSOLE_MENUCONTROL;
|
} CONSOLE_MENUCONTROL, *PCONSOLE_MENUCONTROL;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
BOOL Enable;
|
HANDLE ConsoleHandle;
|
||||||
|
BOOL Enable;
|
||||||
} CONSOLE_SETMENUCLOSE, *PCONSOLE_SETMENUCLOSE;
|
} CONSOLE_SETMENUCLOSE, *PCONSOLE_SETMENUCLOSE;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -564,12 +583,14 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
HWND WindowHandle;
|
HANDLE ConsoleHandle;
|
||||||
|
HWND WindowHandle;
|
||||||
} CONSOLE_GETWINDOW, *PCONSOLE_GETWINDOW;
|
} CONSOLE_GETWINDOW, *PCONSOLE_GETWINDOW;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
HICON WindowIcon;
|
HANDLE ConsoleHandle;
|
||||||
|
HICON IconHandle;
|
||||||
} CONSOLE_SETICON, *PCONSOLE_SETICON;
|
} CONSOLE_SETICON, *PCONSOLE_SETICON;
|
||||||
|
|
||||||
|
|
||||||
|
@ -665,14 +686,24 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
HANDLE ConsoleHandle;
|
||||||
CONSOLE_SELECTION_INFO Info;
|
CONSOLE_SELECTION_INFO Info;
|
||||||
} CONSOLE_GETSELECTIONINFO, *PCONSOLE_GETSELECTIONINFO;
|
} CONSOLE_GETSELECTIONINFO, *PCONSOLE_GETSELECTIONINFO;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
BOOL InputCP; // TRUE : Input Code Page ; FALSE : Output Code Page
|
HANDLE ConsoleHandle;
|
||||||
UINT CodePage;
|
UINT CodePage;
|
||||||
} CONSOLE_GETSETINPUTOUTPUTCP, *PCONSOLE_GETSETINPUTOUTPUTCP;
|
BOOL OutputCP; // TRUE : Output Code Page ; FALSE : Input Code Page
|
||||||
|
} CONSOLE_GETINPUTOUTPUTCP, *PCONSOLE_GETINPUTOUTPUTCP;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
HANDLE ConsoleHandle;
|
||||||
|
UINT CodePage;
|
||||||
|
BOOL OutputCP; // TRUE : Output Code Page ; FALSE : Input Code Page
|
||||||
|
HANDLE EventHandle;
|
||||||
|
} CONSOLE_SETINPUTOUTPUTCP, *PCONSOLE_SETINPUTOUTPUTCP;
|
||||||
|
|
||||||
typedef struct _CONSOLE_API_MESSAGE
|
typedef struct _CONSOLE_API_MESSAGE
|
||||||
{
|
{
|
||||||
|
@ -764,7 +795,8 @@ typedef struct _CONSOLE_API_MESSAGE
|
||||||
CONSOLE_GETNUMINPUTEVENTS GetNumInputEventsRequest;
|
CONSOLE_GETNUMINPUTEVENTS GetNumInputEventsRequest;
|
||||||
|
|
||||||
/* Input and Output Code Pages */
|
/* Input and Output Code Pages */
|
||||||
CONSOLE_GETSETINPUTOUTPUTCP ConsoleCPRequest;
|
CONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest;
|
||||||
|
CONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest;
|
||||||
} Data;
|
} Data;
|
||||||
} CONSOLE_API_MESSAGE, *PCONSOLE_API_MESSAGE;
|
} CONSOLE_API_MESSAGE, *PCONSOLE_API_MESSAGE;
|
||||||
|
|
||||||
|
|
|
@ -1007,12 +1007,12 @@ ConDrvSetConsoleTitle(IN PCONSOLE Console,
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvGetConsoleCP(IN PCONSOLE Console,
|
ConDrvGetConsoleCP(IN PCONSOLE Console,
|
||||||
OUT PUINT CodePage,
|
OUT PUINT CodePage,
|
||||||
IN BOOLEAN InputCP)
|
IN BOOLEAN OutputCP)
|
||||||
{
|
{
|
||||||
if (Console == NULL || CodePage == NULL)
|
if (Console == NULL || CodePage == NULL)
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
*CodePage = (InputCP ? Console->CodePage : Console->OutputCodePage);
|
*CodePage = (OutputCP ? Console->OutputCodePage : Console->CodePage);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1020,15 +1020,15 @@ ConDrvGetConsoleCP(IN PCONSOLE Console,
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvSetConsoleCP(IN PCONSOLE Console,
|
ConDrvSetConsoleCP(IN PCONSOLE Console,
|
||||||
IN UINT CodePage,
|
IN UINT CodePage,
|
||||||
IN BOOLEAN InputCP)
|
IN BOOLEAN OutputCP)
|
||||||
{
|
{
|
||||||
if (Console == NULL || !IsValidCodePage(CodePage))
|
if (Console == NULL || !IsValidCodePage(CodePage))
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
if (InputCP)
|
if (OutputCP)
|
||||||
Console->CodePage = CodePage;
|
|
||||||
else
|
|
||||||
Console->OutputCodePage = CodePage;
|
Console->OutputCodePage = CodePage;
|
||||||
|
else
|
||||||
|
Console->CodePage = CodePage;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,7 @@ DummyChangeTitle(IN OUT PFRONTEND This)
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
DummyChangeIcon(IN OUT PFRONTEND This,
|
DummyChangeIcon(IN OUT PFRONTEND This,
|
||||||
HICON hWindowIcon)
|
HICON IconHandle)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -146,15 +146,15 @@ DummyShowMouseCursor(IN OUT PFRONTEND This,
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
DummySetMouseCursor(IN OUT PFRONTEND This,
|
DummySetMouseCursor(IN OUT PFRONTEND This,
|
||||||
HCURSOR hCursor)
|
HCURSOR CursorHandle)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HMENU NTAPI
|
static HMENU NTAPI
|
||||||
DummyMenuControl(IN OUT PFRONTEND This,
|
DummyMenuControl(IN OUT PFRONTEND This,
|
||||||
UINT cmdIdLow,
|
UINT CmdIdLow,
|
||||||
UINT cmdIdHigh)
|
UINT CmdIdHigh)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1153,26 +1153,33 @@ ConDrvFillConsoleOutput(IN PCONSOLE Console,
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvGetConsoleScreenBufferInfo(IN PCONSOLE Console,
|
ConDrvGetConsoleScreenBufferInfo(IN PCONSOLE Console,
|
||||||
IN PTEXTMODE_SCREEN_BUFFER Buffer,
|
IN PTEXTMODE_SCREEN_BUFFER Buffer,
|
||||||
OUT PCONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo)
|
OUT PCOORD ScreenBufferSize,
|
||||||
|
OUT PCOORD CursorPosition,
|
||||||
|
OUT PCOORD ViewOrigin,
|
||||||
|
OUT PCOORD ViewSize,
|
||||||
|
OUT PCOORD MaximumViewSize,
|
||||||
|
OUT PWORD Attributes)
|
||||||
{
|
{
|
||||||
if (Console == NULL || Buffer == NULL || ScreenBufferInfo == NULL)
|
if (Console == NULL || Buffer == NULL || ScreenBufferSize == NULL ||
|
||||||
|
CursorPosition == NULL || ViewOrigin == NULL || ViewSize == NULL ||
|
||||||
|
MaximumViewSize == NULL || Attributes == NULL)
|
||||||
|
{
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
/* Validity check */
|
/* Validity check */
|
||||||
ASSERT(Console == Buffer->Header.Console);
|
ASSERT(Console == Buffer->Header.Console);
|
||||||
|
|
||||||
ScreenBufferInfo->dwSize = Buffer->ScreenBufferSize;
|
*ScreenBufferSize = Buffer->ScreenBufferSize;
|
||||||
ScreenBufferInfo->dwCursorPosition = Buffer->CursorPosition;
|
*CursorPosition = Buffer->CursorPosition;
|
||||||
ScreenBufferInfo->wAttributes = Buffer->ScreenDefaultAttrib;
|
*ViewOrigin = Buffer->ViewOrigin;
|
||||||
ScreenBufferInfo->srWindow.Left = Buffer->ViewOrigin.X;
|
*ViewSize = Buffer->ViewSize;
|
||||||
ScreenBufferInfo->srWindow.Top = Buffer->ViewOrigin.Y;
|
*Attributes = Buffer->ScreenDefaultAttrib;
|
||||||
ScreenBufferInfo->srWindow.Right = Buffer->ViewOrigin.X + Buffer->ViewSize.X - 1;
|
|
||||||
ScreenBufferInfo->srWindow.Bottom = Buffer->ViewOrigin.Y + Buffer->ViewSize.Y - 1;
|
|
||||||
|
|
||||||
// FIXME: Refine the computation
|
// FIXME: Refine the computation
|
||||||
ScreenBufferInfo->dwMaximumWindowSize = Buffer->ScreenBufferSize;
|
*MaximumViewSize = Buffer->ScreenBufferSize;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -683,9 +683,14 @@ CSR_API(SrvFillConsoleOutput)
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvGetConsoleScreenBufferInfo(IN PCONSOLE Console,
|
ConDrvGetConsoleScreenBufferInfo(IN PCONSOLE Console,
|
||||||
IN PTEXTMODE_SCREEN_BUFFER Buffer,
|
IN PTEXTMODE_SCREEN_BUFFER Buffer,
|
||||||
OUT PCONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo);
|
OUT PCOORD ScreenBufferSize,
|
||||||
|
OUT PCOORD CursorPosition,
|
||||||
|
OUT PCOORD ViewOrigin,
|
||||||
|
OUT PCOORD ViewSize,
|
||||||
|
OUT PCOORD MaximumViewSize,
|
||||||
|
OUT PWORD Attributes);
|
||||||
CSR_API(SrvGetConsoleScreenBufferInfo)
|
CSR_API(SrvGetConsoleScreenBufferInfo)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
@ -701,7 +706,12 @@ CSR_API(SrvGetConsoleScreenBufferInfo)
|
||||||
|
|
||||||
Status = ConDrvGetConsoleScreenBufferInfo(Buffer->Header.Console,
|
Status = ConDrvGetConsoleScreenBufferInfo(Buffer->Header.Console,
|
||||||
Buffer,
|
Buffer,
|
||||||
&ScreenBufferInfoRequest->Info);
|
&ScreenBufferInfoRequest->ScreenBufferSize,
|
||||||
|
&ScreenBufferInfoRequest->CursorPosition,
|
||||||
|
&ScreenBufferInfoRequest->ViewOrigin,
|
||||||
|
&ScreenBufferInfoRequest->ViewSize,
|
||||||
|
&ScreenBufferInfoRequest->MaximumViewSize,
|
||||||
|
&ScreenBufferInfoRequest->Attributes);
|
||||||
|
|
||||||
ConSrvReleaseScreenBuffer(Buffer, TRUE);
|
ConSrvReleaseScreenBuffer(Buffer, TRUE);
|
||||||
return Status;
|
return Status;
|
||||||
|
|
|
@ -543,22 +543,22 @@ CSR_API(SrvSetConsoleTitle)
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvGetConsoleCP(IN PCONSOLE Console,
|
ConDrvGetConsoleCP(IN PCONSOLE Console,
|
||||||
OUT PUINT CodePage,
|
OUT PUINT CodePage,
|
||||||
IN BOOLEAN InputCP);
|
IN BOOLEAN OutputCP);
|
||||||
CSR_API(SrvGetConsoleCP)
|
CSR_API(SrvGetConsoleCP)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PCONSOLE_GETSETINPUTOUTPUTCP ConsoleCPRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleCPRequest;
|
PCONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetConsoleCPRequest;
|
||||||
PCONSOLE Console;
|
PCONSOLE Console;
|
||||||
|
|
||||||
DPRINT("SrvGetConsoleCP, getting %s Code Page\n",
|
DPRINT("SrvGetConsoleCP, getting %s Code Page\n",
|
||||||
ConsoleCPRequest->InputCP ? "Input" : "Output");
|
GetConsoleCPRequest->OutputCP ? "Output" : "Input");
|
||||||
|
|
||||||
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
|
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
|
||||||
Status = ConDrvGetConsoleCP(Console,
|
Status = ConDrvGetConsoleCP(Console,
|
||||||
&ConsoleCPRequest->CodePage,
|
&GetConsoleCPRequest->CodePage,
|
||||||
ConsoleCPRequest->InputCP);
|
GetConsoleCPRequest->OutputCP);
|
||||||
|
|
||||||
ConSrvReleaseConsole(Console, TRUE);
|
ConSrvReleaseConsole(Console, TRUE);
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -567,22 +567,22 @@ CSR_API(SrvGetConsoleCP)
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ConDrvSetConsoleCP(IN PCONSOLE Console,
|
ConDrvSetConsoleCP(IN PCONSOLE Console,
|
||||||
IN UINT CodePage,
|
IN UINT CodePage,
|
||||||
IN BOOLEAN InputCP);
|
IN BOOLEAN OutputCP);
|
||||||
CSR_API(SrvSetConsoleCP)
|
CSR_API(SrvSetConsoleCP)
|
||||||
{
|
{
|
||||||
NTSTATUS Status = STATUS_INVALID_PARAMETER;
|
NTSTATUS Status = STATUS_INVALID_PARAMETER;
|
||||||
PCONSOLE_GETSETINPUTOUTPUTCP ConsoleCPRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleCPRequest;
|
PCONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetConsoleCPRequest;
|
||||||
PCONSOLE Console;
|
PCONSOLE Console;
|
||||||
|
|
||||||
DPRINT("SrvSetConsoleCP, setting %s Code Page\n",
|
DPRINT("SrvSetConsoleCP, setting %s Code Page\n",
|
||||||
ConsoleCPRequest->InputCP ? "Input" : "Output");
|
SetConsoleCPRequest->OutputCP ? "Output" : "Input");
|
||||||
|
|
||||||
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
|
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
|
||||||
Status = ConDrvSetConsoleCP(Console,
|
Status = ConDrvSetConsoleCP(Console,
|
||||||
ConsoleCPRequest->CodePage,
|
SetConsoleCPRequest->CodePage,
|
||||||
ConsoleCPRequest->InputCP);
|
SetConsoleCPRequest->OutputCP);
|
||||||
|
|
||||||
ConSrvReleaseConsole(Console, TRUE);
|
ConSrvReleaseConsole(Console, TRUE);
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -600,8 +600,8 @@ CSR_API(SrvGetConsoleProcessList)
|
||||||
PCONSOLE Console;
|
PCONSOLE Console;
|
||||||
|
|
||||||
if (!CsrValidateMessageBuffer(ApiMessage,
|
if (!CsrValidateMessageBuffer(ApiMessage,
|
||||||
(PVOID)&GetProcessListRequest->pProcessIds,
|
(PVOID)&GetProcessListRequest->ProcessIdsList,
|
||||||
GetProcessListRequest->nMaxIds,
|
GetProcessListRequest->ProcessCount,
|
||||||
sizeof(DWORD)))
|
sizeof(DWORD)))
|
||||||
{
|
{
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
@ -611,9 +611,9 @@ CSR_API(SrvGetConsoleProcessList)
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
|
||||||
Status = ConDrvGetConsoleProcessList(Console,
|
Status = ConDrvGetConsoleProcessList(Console,
|
||||||
GetProcessListRequest->pProcessIds,
|
GetProcessListRequest->ProcessIdsList,
|
||||||
GetProcessListRequest->nMaxIds,
|
GetProcessListRequest->ProcessCount,
|
||||||
&GetProcessListRequest->nProcessIdsTotal);
|
&GetProcessListRequest->ProcessCount);
|
||||||
|
|
||||||
ConSrvReleaseConsole(Console, TRUE);
|
ConSrvReleaseConsole(Console, TRUE);
|
||||||
return Status;
|
return Status;
|
||||||
|
|
|
@ -222,7 +222,7 @@ CSR_API(SrvSetConsoleCursor)
|
||||||
|
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
Success = TermSetMouseCursor(Console, SetCursorRequest->hCursor);
|
Success = TermSetMouseCursor(Console, SetCursorRequest->CursorHandle);
|
||||||
|
|
||||||
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
||||||
return (Success ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
|
return (Success ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
|
||||||
|
@ -244,9 +244,9 @@ CSR_API(SrvConsoleMenuControl)
|
||||||
|
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
MenuControlRequest->hMenu = TermMenuControl(Console,
|
MenuControlRequest->MenuHandle = TermMenuControl(Console,
|
||||||
MenuControlRequest->dwCmdIdLow,
|
MenuControlRequest->CmdIdLow,
|
||||||
MenuControlRequest->dwCmdIdHigh);
|
MenuControlRequest->CmdIdHigh);
|
||||||
|
|
||||||
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
ConSrvReleaseScreenBuffer(Buff, TRUE);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
@ -293,7 +293,7 @@ CSR_API(SrvSetConsoleIcon)
|
||||||
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
|
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
|
||||||
Status = (TermChangeIcon(Console, SetIconRequest->WindowIcon)
|
Status = (TermChangeIcon(Console, SetIconRequest->IconHandle)
|
||||||
? STATUS_SUCCESS
|
? STATUS_SUCCESS
|
||||||
: STATUS_UNSUCCESSFUL);
|
: STATUS_UNSUCCESSFUL);
|
||||||
|
|
||||||
|
|
|
@ -64,8 +64,8 @@ typedef struct _GUI_CONSOLE_DATA
|
||||||
BOOL IgnoreNextMouseSignal; /* Used in cases where we don't want to treat a mouse signal */
|
BOOL IgnoreNextMouseSignal; /* Used in cases where we don't want to treat a mouse signal */
|
||||||
|
|
||||||
BOOL IsCloseButtonEnabled; /* TRUE if the Close button and the corresponding system menu item are enabled (default), FALSE otherwise */
|
BOOL IsCloseButtonEnabled; /* TRUE if the Close button and the corresponding system menu item are enabled (default), FALSE otherwise */
|
||||||
UINT cmdIdLow ; /* Lowest menu id of the user-reserved menu id range */
|
UINT CmdIdLow ; /* Lowest menu id of the user-reserved menu id range */
|
||||||
UINT cmdIdHigh; /* Highest menu id of the user-reserved menu id range */
|
UINT CmdIdHigh; /* Highest menu id of the user-reserved menu id range */
|
||||||
|
|
||||||
// COLORREF Colors[16];
|
// COLORREF Colors[16];
|
||||||
|
|
||||||
|
|
|
@ -231,6 +231,7 @@ GuiSendMenuEvent(PCONSOLE Console, UINT CmdId)
|
||||||
er.EventType = MENU_EVENT;
|
er.EventType = MENU_EVENT;
|
||||||
er.Event.MenuEvent.dwCommandId = CmdId;
|
er.Event.MenuEvent.dwCommandId = CmdId;
|
||||||
|
|
||||||
|
DPRINT1("Menu item ID: %d\n", CmdId);
|
||||||
ConioProcessInputEvent(Console, &er);
|
ConioProcessInputEvent(Console, &er);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -265,7 +266,7 @@ GuiConsoleHandleSysMenuCommand(PGUI_CONSOLE_DATA GuiData, WPARAM wParam, LPARAM
|
||||||
* send to him a menu event and return directly. The user must handle those
|
* send to him a menu event and return directly. The user must handle those
|
||||||
* reserved menu commands...
|
* reserved menu commands...
|
||||||
*/
|
*/
|
||||||
if (GuiData->cmdIdLow <= (UINT)wParam && (UINT)wParam <= GuiData->cmdIdHigh)
|
if (GuiData->CmdIdLow <= (UINT)wParam && (UINT)wParam <= GuiData->CmdIdHigh)
|
||||||
{
|
{
|
||||||
GuiSendMenuEvent(Console, (UINT)wParam);
|
GuiSendMenuEvent(Console, (UINT)wParam);
|
||||||
goto Unlock_Quit;
|
goto Unlock_Quit;
|
||||||
|
@ -2462,7 +2463,7 @@ GuiInitFrontEnd(IN OUT PFRONTEND This,
|
||||||
GuiData->IsCloseButtonEnabled = TRUE;
|
GuiData->IsCloseButtonEnabled = TRUE;
|
||||||
|
|
||||||
/* There is no user-reserved menu id range by default */
|
/* There is no user-reserved menu id range by default */
|
||||||
GuiData->cmdIdLow = GuiData->cmdIdHigh = 0;
|
GuiData->CmdIdLow = GuiData->CmdIdHigh = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to wait until the GUI has been fully initialized
|
* We need to wait until the GUI has been fully initialized
|
||||||
|
@ -2747,7 +2748,7 @@ GuiProcessKeyCallback(IN OUT PFRONTEND This,
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
GuiSetMouseCursor(IN OUT PFRONTEND This,
|
GuiSetMouseCursor(IN OUT PFRONTEND This,
|
||||||
HCURSOR hCursor);
|
HCURSOR CursorHandle);
|
||||||
|
|
||||||
static VOID NTAPI
|
static VOID NTAPI
|
||||||
GuiRefreshInternalInfo(IN OUT PFRONTEND This)
|
GuiRefreshInternalInfo(IN OUT PFRONTEND This)
|
||||||
|
@ -2781,20 +2782,20 @@ GuiChangeTitle(IN OUT PFRONTEND This)
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
GuiChangeIcon(IN OUT PFRONTEND This,
|
GuiChangeIcon(IN OUT PFRONTEND This,
|
||||||
HICON hWindowIcon)
|
HICON IconHandle)
|
||||||
{
|
{
|
||||||
PGUI_CONSOLE_DATA GuiData = This->Data;
|
PGUI_CONSOLE_DATA GuiData = This->Data;
|
||||||
HICON hIcon, hIconSm;
|
HICON hIcon, hIconSm;
|
||||||
|
|
||||||
if (hWindowIcon == NULL)
|
if (IconHandle == NULL)
|
||||||
{
|
{
|
||||||
hIcon = ghDefaultIcon;
|
hIcon = ghDefaultIcon;
|
||||||
hIconSm = ghDefaultIconSm;
|
hIconSm = ghDefaultIconSm;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hIcon = CopyIcon(hWindowIcon);
|
hIcon = CopyIcon(IconHandle);
|
||||||
hIconSm = CopyIcon(hWindowIcon);
|
hIconSm = CopyIcon(IconHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hIcon == NULL)
|
if (hIcon == NULL)
|
||||||
|
@ -2953,7 +2954,7 @@ GuiShowMouseCursor(IN OUT PFRONTEND This,
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
GuiSetMouseCursor(IN OUT PFRONTEND This,
|
GuiSetMouseCursor(IN OUT PFRONTEND This,
|
||||||
HCURSOR hCursor)
|
HCURSOR CursorHandle)
|
||||||
{
|
{
|
||||||
PGUI_CONSOLE_DATA GuiData = This->Data;
|
PGUI_CONSOLE_DATA GuiData = This->Data;
|
||||||
|
|
||||||
|
@ -2961,7 +2962,7 @@ GuiSetMouseCursor(IN OUT PFRONTEND This,
|
||||||
* Set the cursor's handle. If the given handle is NULL,
|
* Set the cursor's handle. If the given handle is NULL,
|
||||||
* then restore the default cursor.
|
* then restore the default cursor.
|
||||||
*/
|
*/
|
||||||
GuiData->hCursor = (hCursor ? hCursor : ghDefaultCursor);
|
GuiData->hCursor = (CursorHandle ? CursorHandle : ghDefaultCursor);
|
||||||
|
|
||||||
/* Effectively modify the shape of the cursor (use special values for (w|l)Param) */
|
/* Effectively modify the shape of the cursor (use special values for (w|l)Param) */
|
||||||
PostMessageW(GuiData->hWindow, WM_SETCURSOR, -1, -1);
|
PostMessageW(GuiData->hWindow, WM_SETCURSOR, -1, -1);
|
||||||
|
@ -2971,13 +2972,13 @@ GuiSetMouseCursor(IN OUT PFRONTEND This,
|
||||||
|
|
||||||
static HMENU NTAPI
|
static HMENU NTAPI
|
||||||
GuiMenuControl(IN OUT PFRONTEND This,
|
GuiMenuControl(IN OUT PFRONTEND This,
|
||||||
UINT cmdIdLow,
|
UINT CmdIdLow,
|
||||||
UINT cmdIdHigh)
|
UINT CmdIdHigh)
|
||||||
{
|
{
|
||||||
PGUI_CONSOLE_DATA GuiData = This->Data;
|
PGUI_CONSOLE_DATA GuiData = This->Data;
|
||||||
|
|
||||||
GuiData->cmdIdLow = cmdIdLow ;
|
GuiData->CmdIdLow = CmdIdLow ;
|
||||||
GuiData->cmdIdHigh = cmdIdHigh;
|
GuiData->CmdIdHigh = CmdIdHigh;
|
||||||
|
|
||||||
return GetSystemMenu(GuiData->hWindow, FALSE);
|
return GetSystemMenu(GuiData->hWindow, FALSE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -726,7 +726,7 @@ TuiChangeTitle(IN OUT PFRONTEND This)
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
TuiChangeIcon(IN OUT PFRONTEND This,
|
TuiChangeIcon(IN OUT PFRONTEND This,
|
||||||
HICON hWindowIcon)
|
HICON IconHandle)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -778,15 +778,15 @@ TuiShowMouseCursor(IN OUT PFRONTEND This,
|
||||||
|
|
||||||
static BOOL NTAPI
|
static BOOL NTAPI
|
||||||
TuiSetMouseCursor(IN OUT PFRONTEND This,
|
TuiSetMouseCursor(IN OUT PFRONTEND This,
|
||||||
HCURSOR hCursor)
|
HCURSOR CursorHandle)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HMENU NTAPI
|
static HMENU NTAPI
|
||||||
TuiMenuControl(IN OUT PFRONTEND This,
|
TuiMenuControl(IN OUT PFRONTEND This,
|
||||||
UINT cmdIdLow,
|
UINT CmdIdLow,
|
||||||
UINT cmdIdHigh)
|
UINT CmdIdHigh)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -836,7 +836,7 @@ CSR_API(SrvCloseHandle)
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = ConSrvRemoveObject(ProcessData, CloseHandleRequest->ConsoleHandle);
|
Status = ConSrvRemoveObject(ProcessData, CloseHandleRequest->Handle);
|
||||||
|
|
||||||
ConSrvReleaseConsole(Console, TRUE);
|
ConSrvReleaseConsole(Console, TRUE);
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -849,8 +849,10 @@ CSR_API(SrvVerifyConsoleIoHandle)
|
||||||
PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process);
|
PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process);
|
||||||
PCONSOLE Console;
|
PCONSOLE Console;
|
||||||
|
|
||||||
HANDLE ConsoleHandle = VerifyHandleRequest->ConsoleHandle;
|
HANDLE IoHandle = VerifyHandleRequest->Handle;
|
||||||
ULONG Index = HandleToULong(ConsoleHandle) >> 2;
|
ULONG Index = HandleToULong(IoHandle) >> 2;
|
||||||
|
|
||||||
|
VerifyHandleRequest->IsValid = FALSE;
|
||||||
|
|
||||||
Status = ConSrvGetConsole(ProcessData, &Console, TRUE);
|
Status = ConSrvGetConsole(ProcessData, &Console, TRUE);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
@ -864,18 +866,21 @@ CSR_API(SrvVerifyConsoleIoHandle)
|
||||||
// ASSERT( (ProcessData->HandleTable == NULL && ProcessData->HandleTableSize == 0) ||
|
// ASSERT( (ProcessData->HandleTable == NULL && ProcessData->HandleTableSize == 0) ||
|
||||||
// (ProcessData->HandleTable != NULL && ProcessData->HandleTableSize != 0) );
|
// (ProcessData->HandleTable != NULL && ProcessData->HandleTableSize != 0) );
|
||||||
|
|
||||||
if (!IsConsoleHandle(ConsoleHandle) ||
|
if (!IsConsoleHandle(IoHandle) ||
|
||||||
Index >= ProcessData->HandleTableSize ||
|
Index >= ProcessData->HandleTableSize ||
|
||||||
ProcessData->HandleTable[Index].Object == NULL)
|
ProcessData->HandleTable[Index].Object == NULL)
|
||||||
{
|
{
|
||||||
DPRINT("SrvVerifyConsoleIoHandle failed\n");
|
DPRINT("SrvVerifyConsoleIoHandle failed\n");
|
||||||
Status = STATUS_INVALID_HANDLE;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VerifyHandleRequest->IsValid = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
|
|
||||||
ConSrvReleaseConsole(Console, TRUE);
|
ConSrvReleaseConsole(Console, TRUE);
|
||||||
return Status;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -224,7 +224,7 @@ typedef struct _FRONTEND_VTBL
|
||||||
*/
|
*/
|
||||||
VOID (NTAPI *ChangeTitle)(IN OUT PFRONTEND This);
|
VOID (NTAPI *ChangeTitle)(IN OUT PFRONTEND This);
|
||||||
BOOL (NTAPI *ChangeIcon)(IN OUT PFRONTEND This,
|
BOOL (NTAPI *ChangeIcon)(IN OUT PFRONTEND This,
|
||||||
HICON hWindowIcon);
|
HICON IconHandle);
|
||||||
HWND (NTAPI *GetConsoleWindowHandle)(IN OUT PFRONTEND This);
|
HWND (NTAPI *GetConsoleWindowHandle)(IN OUT PFRONTEND This);
|
||||||
VOID (NTAPI *GetLargestConsoleWindowSize)(IN OUT PFRONTEND This,
|
VOID (NTAPI *GetLargestConsoleWindowSize)(IN OUT PFRONTEND This,
|
||||||
PCOORD pSize);
|
PCOORD pSize);
|
||||||
|
@ -237,10 +237,10 @@ typedef struct _FRONTEND_VTBL
|
||||||
INT (NTAPI *ShowMouseCursor)(IN OUT PFRONTEND This,
|
INT (NTAPI *ShowMouseCursor)(IN OUT PFRONTEND This,
|
||||||
BOOL Show);
|
BOOL Show);
|
||||||
BOOL (NTAPI *SetMouseCursor)(IN OUT PFRONTEND This,
|
BOOL (NTAPI *SetMouseCursor)(IN OUT PFRONTEND This,
|
||||||
HCURSOR hCursor);
|
HCURSOR CursorHandle);
|
||||||
HMENU (NTAPI *MenuControl)(IN OUT PFRONTEND This,
|
HMENU (NTAPI *MenuControl)(IN OUT PFRONTEND This,
|
||||||
UINT cmdIdLow,
|
UINT CmdIdLow,
|
||||||
UINT cmdIdHigh);
|
UINT CmdIdHigh);
|
||||||
BOOL (NTAPI *SetMenuClose)(IN OUT PFRONTEND This,
|
BOOL (NTAPI *SetMenuClose)(IN OUT PFRONTEND This,
|
||||||
BOOL Enable);
|
BOOL Enable);
|
||||||
|
|
||||||
|
|
|
@ -32,8 +32,8 @@
|
||||||
|
|
||||||
#define TermChangeTitle(Console) \
|
#define TermChangeTitle(Console) \
|
||||||
(Console)->TermIFace.Vtbl->ChangeTitle(&(Console)->TermIFace)
|
(Console)->TermIFace.Vtbl->ChangeTitle(&(Console)->TermIFace)
|
||||||
#define TermChangeIcon(Console, hWindowIcon) \
|
#define TermChangeIcon(Console, IconHandle) \
|
||||||
(Console)->TermIFace.Vtbl->ChangeIcon(&(Console)->TermIFace, (hWindowIcon))
|
(Console)->TermIFace.Vtbl->ChangeIcon(&(Console)->TermIFace, (IconHandle))
|
||||||
#define TermGetConsoleWindowHandle(Console) \
|
#define TermGetConsoleWindowHandle(Console) \
|
||||||
(Console)->TermIFace.Vtbl->GetConsoleWindowHandle(&(Console)->TermIFace)
|
(Console)->TermIFace.Vtbl->GetConsoleWindowHandle(&(Console)->TermIFace)
|
||||||
#define TermGetLargestConsoleWindowSize(Console, pSize) \
|
#define TermGetLargestConsoleWindowSize(Console, pSize) \
|
||||||
|
@ -46,8 +46,8 @@
|
||||||
(Console)->TermIFace.Vtbl->SetDisplayMode(&(Console)->TermIFace, (NewMode))
|
(Console)->TermIFace.Vtbl->SetDisplayMode(&(Console)->TermIFace, (NewMode))
|
||||||
#define TermShowMouseCursor(Console, Show) \
|
#define TermShowMouseCursor(Console, Show) \
|
||||||
(Console)->TermIFace.Vtbl->ShowMouseCursor(&(Console)->TermIFace, (Show))
|
(Console)->TermIFace.Vtbl->ShowMouseCursor(&(Console)->TermIFace, (Show))
|
||||||
#define TermSetMouseCursor(Console, hCursor) \
|
#define TermSetMouseCursor(Console, CursorHandle) \
|
||||||
(Console)->TermIFace.Vtbl->SetMouseCursor(&(Console)->TermIFace, (hCursor))
|
(Console)->TermIFace.Vtbl->SetMouseCursor(&(Console)->TermIFace, (CursorHandle))
|
||||||
#define TermMenuControl(Console, CmdIdLow, CmdIdHigh) \
|
#define TermMenuControl(Console, CmdIdLow, CmdIdHigh) \
|
||||||
(Console)->TermIFace.Vtbl->MenuControl(&(Console)->TermIFace, (CmdIdLow), (CmdIdHigh))
|
(Console)->TermIFace.Vtbl->MenuControl(&(Console)->TermIFace, (CmdIdLow), (CmdIdHigh))
|
||||||
#define TermSetMenuClose(Console, Enable) \
|
#define TermSetMenuClose(Console, Enable) \
|
||||||
|
|
Loading…
Reference in a new issue