Windows2003-3790/windows/core/ntcon/client/getset.c

1752 lines
43 KiB
C
Raw Permalink Normal View History

2001-01-01 00:00:00 +01:00
//depot/lab01_n/windows/Core/ntcon/client/getset.c#5 - integrate change 19598 (text)
/*++
Copyright (c) 1985 - 1999, Microsoft Corporation
Module Name:
getset.c
Abstract:
This module contains the stubs for the console get/set API.
Author:
Therese Stowell (thereses) 14-Nov-1990
Revision History:
--*/
#include "precomp.h"
#pragma hdrstop
#pragma hdrstop
#if !defined(BUILD_WOW6432)
BOOL
WINAPI
GetConsoleMode(
IN HANDLE hConsoleHandle,
OUT LPDWORD lpMode
)
/*++
Parameters:
hConsoleHandle - Supplies a console input or output handle.
lpMode - Supplies a pointer to a dword in which to store the mode.
Input Mode Flags:
ENABLE_LINE_INPUT - line oriented input is on.
ENABLE_ECHO_INPUT - characters will be written to the screen as they are
read.
ENABLE_WINDOW_INPUT - the caller is windows-aware
Output Mode Flags:
ENABLE_LINE_OUTPUT - line oriented output is on.
ENABLE_WRAP_AT_EOL_OUTPUT - the cursor will move to the
beginning of the next line when the end of the row
is reached.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_MODE_MSG a = &m.u.GetConsoleMode;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->Handle = hConsoleHandle;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetMode
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
try {
*lpMode = a->Mode;
} except( EXCEPTION_EXECUTE_HANDLER ) {
SET_LAST_ERROR (ERROR_INVALID_ACCESS);
return FALSE;
}
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
DWORD
WINAPI
GetNumberOfConsoleFonts(
VOID
)
/*++
Parameters:
none.
Return Value:
NON-NULL - Returns the number of fonts available.
FALSE/NULL - The operation failed.
Extended error status is available using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETNUMBEROFFONTS_MSG a = &m.u.GetNumberOfConsoleFonts;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetNumberOfFonts
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return a->NumberOfFonts;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
GetNumberOfConsoleInputEvents(
IN HANDLE hConsoleInput,
OUT LPDWORD lpNumberOfEvents
)
/*++
Parameters:
hConsoleInput - Supplies an open handle to console input.
lpNumberOfEvents - Pointer to number of events in input buffer.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed.
Extended error status is available using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETNUMBEROFINPUTEVENTS_MSG a = &m.u.GetNumberOfConsoleInputEvents;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->InputHandle = hConsoleInput;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetNumberOfInputEvents
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
try {
*lpNumberOfEvents = a->ReadyEvents;
} except( EXCEPTION_EXECUTE_HANDLER ) {
SET_LAST_ERROR (ERROR_INVALID_ACCESS);
return FALSE;
}
return TRUE;
}
else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
COORD
WINAPI
GetLargestConsoleWindowSize(
IN HANDLE hConsoleOutput
)
/*++
Returns largest window possible, given the current font. The return value
does not take the screen buffer size into account.
Parameters:
hConsoleOutput - Supplies an open handle to console output.
Return Value:
The return value is the maximum window size in rows and columns. A size
of zero will be returned if an error occurs. Extended error information
can be retrieved by calling the GetLastError function.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETLARGESTWINDOWSIZE_MSG a = &m.u.GetLargestConsoleWindowSize;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetLargestWindowSize
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return a->Size;
} else {
COORD Dummy;
Dummy.X = Dummy.Y = 0;
SET_LAST_NT_ERROR (m.ReturnValue);
return Dummy;
}
}
BOOL
WINAPI
GetConsoleScreenBufferInfo(
IN HANDLE hConsoleOutput,
OUT PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
lpConsoleScreenBufferInfo - A pointer to a buffer to receive the
requested information.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETSCREENBUFFERINFO_MSG a = &m.u.GetConsoleScreenBufferInfo;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetScreenBufferInfo
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
try {
lpConsoleScreenBufferInfo->dwSize = a->Size;
lpConsoleScreenBufferInfo->dwCursorPosition = a->CursorPosition;
lpConsoleScreenBufferInfo->wAttributes = a->Attributes;
lpConsoleScreenBufferInfo->srWindow.Left = a->ScrollPosition.X;
lpConsoleScreenBufferInfo->srWindow.Top = a->ScrollPosition.Y;
lpConsoleScreenBufferInfo->srWindow.Right = lpConsoleScreenBufferInfo->srWindow.Left + a->CurrentWindowSize.X-1;
lpConsoleScreenBufferInfo->srWindow.Bottom = lpConsoleScreenBufferInfo->srWindow.Top + a->CurrentWindowSize.Y-1;
lpConsoleScreenBufferInfo->dwMaximumWindowSize = a->MaximumWindowSize;
} except( EXCEPTION_EXECUTE_HANDLER ) {
SET_LAST_ERROR (ERROR_INVALID_ACCESS);
return FALSE;
}
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
GetConsoleCursorInfo(
IN HANDLE hConsoleOutput,
OUT PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
lpConsoleCursorInfo - A pointer to a buffer to receive the
requested information.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETCURSORINFO_MSG a = &m.u.GetConsoleCursorInfo;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetCursorInfo
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
try {
lpConsoleCursorInfo->dwSize = a->CursorSize;
lpConsoleCursorInfo->bVisible = a->Visible;
} except( EXCEPTION_EXECUTE_HANDLER ) {
SET_LAST_ERROR (ERROR_INVALID_ACCESS);
return FALSE;
}
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
GetConsoleSelectionInfo(
OUT PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo
)
/*++
Parameters:
lpConsoleSelectionInfo - A pointer to a buffer to receive the
requested information.
Return Value:
TRUE - The operation was successful.
FALSE - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETSELECTIONINFO_MSG a = &m.u.GetConsoleSelectionInfo;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetSelectionInfo
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
try {
*lpConsoleSelectionInfo = a->SelectionInfo;
} except( EXCEPTION_EXECUTE_HANDLER ) {
SET_LAST_ERROR (ERROR_INVALID_ACCESS);
return FALSE;
}
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
GetNumberOfConsoleMouseButtons(
OUT LPDWORD lpNumberOfMouseButtons
)
/*++
Parameters:
hConsoleInput - Supplies an open handle to console input.
lpNumberOfMouseButtons - pointer to the number of mouse buttons
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETMOUSEINFO_MSG a = &m.u.GetConsoleMouseInfo;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetMouseInfo
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
try {
*lpNumberOfMouseButtons = a->NumButtons;
} except( EXCEPTION_EXECUTE_HANDLER ) {
SET_LAST_ERROR (ERROR_INVALID_ACCESS);
return FALSE;
}
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
DWORD
WINAPI
GetConsoleFontInfo(
IN HANDLE hConsoleOutput,
IN BOOL bMaximumWindow,
IN DWORD nLength,
OUT PCONSOLE_FONT_INFO lpConsoleFontInfo
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
bMaximumWindow - TRUE if caller wants available fonts for the maximum
window size. FALSE if caller wants available fonts for the current
window size.
nLength - Length of buffer in CONSOLE_FONT_INFOs.
lpConsoleFontInfo - A pointer to a buffer to receive the
requested information.
Return Value:
NON-NULL - Returns the number of fonts returned in lpConsoleFontInfo.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETFONTINFO_MSG a = &m.u.GetConsoleFontInfo;
PCSR_CAPTURE_HEADER CaptureBuffer;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
a->MaximumWindow = (BOOLEAN) bMaximumWindow;
a->NumFonts = nLength;
CaptureBuffer = CsrAllocateCaptureBuffer( 1,
nLength * sizeof(CONSOLE_FONT_INFO)
);
if (CaptureBuffer == NULL) {
SET_LAST_ERROR(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
CsrCaptureMessageBuffer( CaptureBuffer,
NULL,
nLength * sizeof(CONSOLE_FONT_INFO),
(PVOID *) &a->BufPtr
);
CsrClientCallServer( (PCSR_API_MSG)&m,
CaptureBuffer,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetFontInfo
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
try {
RtlCopyMemory( lpConsoleFontInfo, a->BufPtr, a->NumFonts * sizeof(CONSOLE_FONT_INFO));
} except( EXCEPTION_EXECUTE_HANDLER ) {
CsrFreeCaptureBuffer( CaptureBuffer );
SET_LAST_ERROR(ERROR_INVALID_ACCESS);
return 0;
}
}
else {
SET_LAST_NT_ERROR (m.ReturnValue);
}
CsrFreeCaptureBuffer( CaptureBuffer );
return a->NumFonts;
}
COORD
WINAPI
GetConsoleFontSize(
IN HANDLE hConsoleOutput,
IN DWORD nFont
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
nFont - Supplies the index of the font to return the size of.
Return Value:
The return value is the height and width of each character in the font.
X field contains width. Y field contains height. Font size
is expressed in pixels. If both the x and y sizes are 0, the function
was unsuccessful. Extended error information can be retrieved by calling
the GetLastError function.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETFONTSIZE_MSG a = &m.u.GetConsoleFontSize;
COORD Dummy;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
a->FontIndex = nFont;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetFontSize
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return a->FontSize;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
Dummy.X = Dummy.Y = 0;
return Dummy;
}
}
BOOL
WINAPI
GetCurrentConsoleFont(
IN HANDLE hConsoleOutput,
IN BOOL bMaximumWindow,
OUT PCONSOLE_FONT_INFO lpConsoleCurrentFont
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
bMaximumWindow - TRUE if caller wants current font for the maximum
window size. FALSE if caller wants current font for the current
window size.
lpConsoleCurrentFont - A pointer to a buffer to receive the
requested information.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETCURRENTFONT_MSG a = &m.u.GetCurrentConsoleFont;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
a->MaximumWindow = (BOOLEAN) bMaximumWindow;
a->OutputHandle = hConsoleOutput;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetCurrentFont
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
try {
lpConsoleCurrentFont->dwFontSize = a->FontSize;
lpConsoleCurrentFont->nFont = a->FontIndex;
} except( EXCEPTION_EXECUTE_HANDLER ) {
SET_LAST_ERROR(ERROR_INVALID_ACCESS);
return FALSE;
}
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
SetConsoleMode(
IN HANDLE hConsoleHandle,
IN DWORD dwMode
)
/*++
Parameters:
hConsoleHandle - Supplies a console input or output handle.
dwMode - Supplies mode.
Input Mode Flags:
ENABLE_LINE_INPUT - line oriented input is on.
ENABLE_ECHO_INPUT - characters will be written to the screen as they are
read.
ENABLE_WINDOW_INPUT - the caller is windows-aware
Output Mode Flags:
ENABLE_LINE_OUTPUT - line oriented output is on.
ENABLE_WRAP_AT_EOL_OUTPUT - the cursor will move to the
beginning of the next line when the end of the row
is reached.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_MODE_MSG a = &m.u.SetConsoleMode;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->Handle = hConsoleHandle;
a->Mode = dwMode;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetMode
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
GenerateConsoleCtrlEvent(
IN DWORD dwCtrlEvent,
IN DWORD dwProcessGroupId
)
/*++
Parameters:
dwCtrlEvent - Supplies event(s) to generate.
dwProcessGroupId - Supplies id of process group to generate
event for. Event will be generated in each
process with that id within the console. If 0,
specified event will be generated in all processes
within the console.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_CTRLEVENT_MSG a = &m.u.GenerateConsoleCtrlEvent;
//
// Check for valid Ctrl Events
//
if ((dwCtrlEvent != CTRL_C_EVENT) && (dwCtrlEvent != CTRL_BREAK_EVENT)) {
SET_LAST_ERROR (ERROR_INVALID_PARAMETER);
return(FALSE);
}
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->CtrlEvent = dwCtrlEvent;
a->ProcessGroupId = dwProcessGroupId;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGenerateCtrlEvent
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
SetConsoleActiveScreenBuffer(
IN HANDLE hConsoleOutput
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output. The screen
buffer attached to this handle becomes the displayed screen buffer.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_SETACTIVESCREENBUFFER_MSG a = &m.u.SetConsoleActiveScreenBuffer;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetActiveScreenBuffer
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
FlushConsoleInputBuffer(
IN HANDLE hConsoleInput
)
/*++
Parameters:
hConsoleInput - Supplies an open handle to console input.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_FLUSHINPUTBUFFER_MSG a = &m.u.FlushConsoleInputBuffer;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->InputHandle = hConsoleInput;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepFlushInputBuffer
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
SetConsoleScreenBufferSize(
IN HANDLE hConsoleOutput,
IN COORD dwSize
)
/*++
Parameters:
hConsoleInput - Supplies an open handle to console input.
dwSize - New size of screen buffer in rows and columns
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_SETSCREENBUFFERSIZE_MSG a = &m.u.SetConsoleScreenBufferSize;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
a->Size = dwSize;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetScreenBufferSize
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
SetConsoleCursorPosition(
IN HANDLE hConsoleOutput,
IN COORD dwCursorPosition
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
dwCursorPosition - Position of cursor in screen buffer
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_SETCURSORPOSITION_MSG a = &m.u.SetConsoleCursorPosition;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
a->CursorPosition = dwCursorPosition;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetCursorPosition
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
SetConsoleCursorInfo(
IN HANDLE hConsoleOutput,
IN CONST CONSOLE_CURSOR_INFO *lpConsoleCursorInfo
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
lpConsoleCursorOrigin - A pointer to a buffer containing the data
to set.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_SETCURSORINFO_MSG a = &m.u.SetConsoleCursorInfo;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
try {
a->CursorSize = lpConsoleCursorInfo->dwSize;
a->Visible = (BOOLEAN) lpConsoleCursorInfo->bVisible;
} except( EXCEPTION_EXECUTE_HANDLER ) {
SET_LAST_ERROR(ERROR_INVALID_ACCESS);
return FALSE;
}
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetCursorInfo
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
SetConsoleWindowInfo(
IN HANDLE hConsoleOutput,
IN BOOL bAbsolute,
IN CONST SMALL_RECT *lpConsoleWindow
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
lpConsoleWindow - A pointer to a rectangle containing the new
dimensions of the console window in screen buffer coordinates.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_SETWINDOWINFO_MSG a = &m.u.SetConsoleWindowInfo;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
a->Absolute = bAbsolute;
try {
a->Window = *lpConsoleWindow;
} except( EXCEPTION_EXECUTE_HANDLER ) {
SET_LAST_ERROR(ERROR_INVALID_ACCESS);
return FALSE;
}
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetWindowInfo
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
APIENTRY
ScrollConsoleScreenBufferInternal(
IN HANDLE hConsoleOutput,
IN CONST SMALL_RECT *lpScrollRectangle,
IN CONST SMALL_RECT *lpClipRectangle,
IN COORD dwDestinationOrigin,
IN CONST CHAR_INFO *lpFill,
IN BOOLEAN Unicode
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
lpScrollRectangle - Pointer to region within screen buffer to move.
lpClipRectangle - Pointer to region within screen buffer that may be
affected by this scroll. This pointer may be NULL.
dwDestinationOrigin - Upper left corner of new location of ScrollRectangle
contents.
lpFill - Pointer to structure containing new contents of ScrollRectangle region.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_SCROLLSCREENBUFFER_MSG a = &m.u.ScrollConsoleScreenBuffer;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
a->Unicode = Unicode;
try {
a->ScrollRectangle = *lpScrollRectangle;
if (lpClipRectangle != NULL) {
a->Clip = TRUE;
a->ClipRectangle = *lpClipRectangle;
}
else {
a->Clip = FALSE;
}
a->Fill = *lpFill;
a->DestinationOrigin = dwDestinationOrigin;
} except( EXCEPTION_EXECUTE_HANDLER ) {
SET_LAST_ERROR(ERROR_INVALID_ACCESS);
return FALSE;
}
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepScrollScreenBuffer
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
#endif //!defined(BUILD_WOW6432)
#if !defined(BUILD_WOW64)
BOOL
APIENTRY
ScrollConsoleScreenBufferA(
HANDLE hConsoleOutput,
CONST SMALL_RECT *lpScrollRectangle,
CONST SMALL_RECT *lpClipRectangle,
COORD dwDestinationOrigin,
CONST CHAR_INFO *lpFill
)
{
return ScrollConsoleScreenBufferInternal(hConsoleOutput,
lpScrollRectangle,
lpClipRectangle,
dwDestinationOrigin,
lpFill,
FALSE);
}
BOOL
APIENTRY
ScrollConsoleScreenBufferW(
HANDLE hConsoleOutput,
CONST SMALL_RECT *lpScrollRectangle,
CONST SMALL_RECT *lpClipRectangle,
COORD dwDestinationOrigin,
CONST CHAR_INFO *lpFill
)
{
return ScrollConsoleScreenBufferInternal(hConsoleOutput,
lpScrollRectangle,
lpClipRectangle,
dwDestinationOrigin,
lpFill,
TRUE);
}
#endif //!defined(BUILD_WOW64)
#if !defined(BUILD_WOW6432)
BOOL
WINAPI
SetConsoleTextAttribute(
IN HANDLE hConsoleOutput,
IN WORD wAttributes
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
wAttributes - Character display attributes.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_SETTEXTATTRIBUTE_MSG a = &m.u.SetConsoleTextAttribute;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
a->Attributes = wAttributes;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetTextAttribute
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
SetConsoleFont(
IN HANDLE hConsoleOutput,
IN DWORD nFont
)
/*++
Parameters:
hConsoleOutput - Supplies an open handle to console output.
nFont - Number of font to set as current font
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_SETFONT_MSG a = &m.u.SetConsoleFont;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->OutputHandle = hConsoleOutput;
a->FontIndex = nFont;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetFont
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
SetConsoleIcon(
IN HICON hIcon
)
/*++
Parameters:
hIcon - Supplies an icon handle.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_SETICON_MSG a = &m.u.SetConsoleIcon;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->hIcon = hIcon;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetIcon
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
#endif //!defined(BUILD_WOW6432)
#if !defined(BUILD_WOW64)
BOOL
APIENTRY
SetConsoleMaximumWindowSize(
HANDLE hConsoleOutput,
COORD dwWindowSize
)
{
UNREFERENCED_PARAMETER(hConsoleOutput);
UNREFERENCED_PARAMETER(dwWindowSize);
return TRUE;
}
#endif //!defined(BUILD_WOW64)
#if !defined(BUILD_WOW6432)
UINT
WINAPI
GetConsoleCP( VOID )
/**++
Parameters:
none
Return Value:
The code page id of the current console. a null return value
indicates failure.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETCP_MSG a = &m.u.GetConsoleCP;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->Output = FALSE;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetCP
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return a->wCodePageID;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
BOOL
WINAPI
SetConsoleCP(
IN UINT wCodePageID
)
/**++
Parameters:
wCodePageID - the code page is to set for the current console.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_SETCP_MSG a = &m.u.SetConsoleCP;
NTSTATUS Status;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->Output = FALSE;
a->wCodePageID = wCodePageID;
#if defined(FE_SB)
Status = NtCreateEvent(&(a->hEvent),
EVENT_ALL_ACCESS,
NULL,
SynchronizationEvent,
(BOOLEAN)FALSE
);
if (!NT_SUCCESS(Status)) {
SET_LAST_NT_ERROR(Status);
return FALSE;
}
#endif
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetCP
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
#if defined(FE_SB)
NTSTATUS Status;
Status = NtWaitForSingleObject(a->hEvent, FALSE, NULL);
NtClose(a->hEvent);
if (Status != 0) {
SET_LAST_NT_ERROR(Status);
return FALSE;
}
#endif
return TRUE;
} else {
#if defined(FE_SB)
NtClose(a->hEvent);
#endif
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
UINT
WINAPI
GetConsoleOutputCP( VOID )
/**++
Parameters:
none
Return Value:
The code page id of the current console output. a null return value
indicates failure.
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETCP_MSG a = &m.u.GetConsoleCP;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->Output = TRUE;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetCP
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return a->wCodePageID;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
NTSTATUS
APIENTRY
SetConsoleOutputCPInternal(
IN UINT wCodePageID
)
{
CONSOLE_API_MSG m;
PCONSOLE_SETCP_MSG a = &m.u.SetConsoleCP;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->Output = TRUE;
a->wCodePageID = wCodePageID;
#if defined(FE_SB)
a->hEvent = NULL;
#endif
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepSetCP
),
sizeof( *a )
);
return m.ReturnValue;
}
#endif //!defined(BUILD_WOW6432)
#if !defined(BUILD_WOW64)
BOOL
WINAPI
SetConsoleOutputCP(
IN UINT wCodePageID
)
/**++
Parameters:
wCodePageID - the code page is to set for the current console output.
Return Value:
TRUE - The operation was successful.
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
NTSTATUS Status;
Status = SetConsoleOutputCPInternal(wCodePageID);
if(NT_SUCCESS(Status)) {
SetTEBLangID();
return TRUE;
}
else {
SET_LAST_NT_ERROR (Status);
return FALSE;
}
}
#endif //!defined(BUILD_WOW64)
#if !defined(BUILD_WOW6432)
BOOL
APIENTRY
GetConsoleKeyboardLayoutNameWorker(
OUT LPSTR pszLayout,
IN BOOL bAnsi)
/**++
Parameters:
pszLayout - address of buffer of least 9 characters
bAnsi - TRUE want ANSI (8-bit) chars
FALSE want Unicode (16-bit) chars
Return Value:
TRUE - success
FALSE - failure
--*/
{
CONSOLE_API_MSG m;
PCONSOLE_GETKEYBOARDLAYOUTNAME_MSG a = &m.u.GetKeyboardLayoutName;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->bAnsi = bAnsi;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetKeyboardLayoutName
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
if (bAnsi) {
strncpy(pszLayout, a->achLayout, 9);
} else {
wcsncpy((LPWSTR)pszLayout, a->awchLayout, 9);
}
return TRUE;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return FALSE;
}
}
#endif //!defined(BUILD_WOW6432)
#if !defined(BUILD_WOW64)
BOOL
GetConsoleKeyboardLayoutNameA(
LPSTR pszLayout)
{
return GetConsoleKeyboardLayoutNameWorker(pszLayout, TRUE);
}
BOOL
GetConsoleKeyboardLayoutNameW(
LPWSTR pwszLayout)
{
return GetConsoleKeyboardLayoutNameWorker((LPSTR)pwszLayout, FALSE);
}
#endif // !defined(BUILD_WOW64)
#if !defined(BUILD_WOW6432)
HWND
APIENTRY
GetConsoleWindow(
VOID)
{
CONSOLE_API_MSG m;
PCONSOLE_GETCONSOLEWINDOW_MSG a = &m.u.GetConsoleWindow;
a->ConsoleHandle = GET_CONSOLE_HANDLE;
CsrClientCallServer( (PCSR_API_MSG)&m,
NULL,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetConsoleWindow
),
sizeof( *a )
);
if (NT_SUCCESS( m.ReturnValue )) {
return a->hwnd;
} else {
SET_LAST_NT_ERROR (m.ReturnValue);
return NULL;
}
}
DWORD
APIENTRY
GetConsoleProcessList(
OUT LPDWORD lpdwProcessList,
IN DWORD dwProcessCount)
{
CONSOLE_API_MSG m;
PCONSOLE_GETCONSOLEPROCESSLIST_MSG a = &m.u.GetConsoleProcessList;
PCSR_CAPTURE_HEADER CaptureBuffer;
if (dwProcessCount == 0 || lpdwProcessList == NULL) {
SET_LAST_ERROR(ERROR_INVALID_PARAMETER);
return 0;
}
a->ConsoleHandle = GET_CONSOLE_HANDLE;
a->dwProcessCount = dwProcessCount;
CaptureBuffer = CsrAllocateCaptureBuffer( 1,
dwProcessCount * sizeof(DWORD)
);
if (CaptureBuffer == NULL) {
SET_LAST_ERROR(ERROR_NOT_ENOUGH_MEMORY);
return 0;
}
CsrCaptureMessageBuffer( CaptureBuffer,
NULL,
dwProcessCount * sizeof(DWORD),
(PVOID *) &a->lpdwProcessList
);
CsrClientCallServer( (PCSR_API_MSG)&m,
CaptureBuffer,
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
ConsolepGetConsoleProcessList
),
sizeof( *a )
);
if (NT_SUCCESS(m.ReturnValue)) {
if (dwProcessCount >= a->dwProcessCount) {
try {
RtlCopyMemory(lpdwProcessList, a->lpdwProcessList, a->dwProcessCount * sizeof(DWORD));
} except( EXCEPTION_EXECUTE_HANDLER ) {
CsrFreeCaptureBuffer( CaptureBuffer );
SET_LAST_ERROR(ERROR_INVALID_ACCESS);
return 0;
}
}
} else {
CsrFreeCaptureBuffer( CaptureBuffer );
SET_LAST_NT_ERROR (m.ReturnValue);
return 0;
}
CsrFreeCaptureBuffer( CaptureBuffer );
return a->dwProcessCount;
}
#endif // !defined(BUILD_WOW6432)