819 lines
20 KiB
C
819 lines
20 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1985 - 1999, Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
private.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This file implements private APIs for Hardware Desktop Support.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Therese Stowell (thereses) 12-13-1991
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
#pragma hdrstop
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#if !defined(BUILD_WOW64)
|
||
|
|
||
|
typedef HANDLE (*PCONVPALFUNC)(HANDLE);
|
||
|
PCONVPALFUNC pfnGdiConvertPalette;
|
||
|
|
||
|
#endif //!defined(BUILD_WOW64)
|
||
|
|
||
|
#if !defined(BUILD_WOW6432)
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
SetConsoleCursor(
|
||
|
IN HANDLE hConsoleOutput,
|
||
|
IN HCURSOR hCursor
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
Sets the mouse pointer for the specified screen buffer.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
hConsoleOutput - Supplies a console output handle.
|
||
|
|
||
|
hCursor - win32 cursor handle, should be NULL to set the default
|
||
|
cursor.
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - The operation was successful.
|
||
|
|
||
|
FALSE/NULL - The operation failed. Extended error status is available
|
||
|
using GetLastError.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
CONSOLE_API_MSG m;
|
||
|
PCONSOLE_SETCURSOR_MSG a = &m.u.SetConsoleCursor;
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
a->OutputHandle = hConsoleOutput;
|
||
|
a->CursorHandle = hCursor;
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
NULL,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepSetCursor
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
if (!NT_SUCCESS( m.ReturnValue)) {
|
||
|
SET_LAST_NT_ERROR(m.ReturnValue);
|
||
|
return FALSE;
|
||
|
}
|
||
|
else {
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
int
|
||
|
WINAPI
|
||
|
ShowConsoleCursor(
|
||
|
IN HANDLE hConsoleOutput,
|
||
|
IN BOOL bShow
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
Sets the mouse pointer visibility counter. If the counter is less than
|
||
|
zero, the mouse pointer is not shown.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
hOutput - Supplies a console output handle.
|
||
|
|
||
|
bShow - if TRUE, the display count is to be increased. if FALSE,
|
||
|
decreased.
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
The return value specifies the new display count.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
CONSOLE_API_MSG m;
|
||
|
PCONSOLE_SHOWCURSOR_MSG a = &m.u.ShowConsoleCursor;
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
a->OutputHandle = hConsoleOutput;
|
||
|
a->bShow = bShow;
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
NULL,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepShowCursor
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
return a->DisplayCount;
|
||
|
|
||
|
}
|
||
|
|
||
|
HMENU
|
||
|
APIENTRY
|
||
|
ConsoleMenuControl(
|
||
|
IN HANDLE hConsoleOutput,
|
||
|
IN UINT dwCommandIdLow,
|
||
|
IN UINT dwCommandIdHigh
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
Sets the command id range for the current screen buffer and returns the
|
||
|
menu handle.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
hConsoleOutput - Supplies a console output handle.
|
||
|
|
||
|
dwCommandIdLow - Specifies the lowest command id to store in the input buffer.
|
||
|
|
||
|
dwCommandIdHigh - Specifies the highest command id to store in the 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_MENUCONTROL_MSG a = &m.u.ConsoleMenuControl;
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
a->OutputHandle = hConsoleOutput;
|
||
|
a->CommandIdLow =dwCommandIdLow;
|
||
|
a->CommandIdHigh = dwCommandIdHigh;
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
NULL,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepMenuControl
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
return a->hMenu;
|
||
|
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
APIENTRY
|
||
|
SetConsolePaletteInternal(
|
||
|
IN HANDLE hConsoleOutput,
|
||
|
IN HPALETTE hPalette,
|
||
|
IN UINT dwUsage
|
||
|
)
|
||
|
{
|
||
|
|
||
|
CONSOLE_API_MSG m;
|
||
|
PCONSOLE_SETPALETTE_MSG a = &m.u.SetConsolePalette;
|
||
|
NTSTATUS Status;
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
a->OutputHandle = hConsoleOutput;
|
||
|
a->hPalette = hPalette;
|
||
|
a->dwUsage = dwUsage;
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
NULL,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepSetPalette
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
if (!NT_SUCCESS( m.ReturnValue)) {
|
||
|
SET_LAST_NT_ERROR(m.ReturnValue);
|
||
|
return FALSE;
|
||
|
}
|
||
|
else {
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
APIENTRY
|
||
|
SetConsoleDisplayMode(
|
||
|
IN HANDLE hConsoleOutput,
|
||
|
IN DWORD dwFlags,
|
||
|
OUT PCOORD lpNewScreenBufferDimensions
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
This routine sets the console display mode for an output buffer.
|
||
|
This API is only supported on x86 machines. Frame buffer consoles
|
||
|
are always windowed.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
hConsoleOutput - Supplies a console output handle.
|
||
|
|
||
|
dwFlags - Specifies the display mode. Options are:
|
||
|
|
||
|
CONSOLE_FULLSCREEN_MODE - data is displayed fullscreen
|
||
|
|
||
|
CONSOLE_WINDOWED_MODE - data is displayed in a window
|
||
|
|
||
|
lpNewScreenBufferDimensions - On output, contains the new dimensions of
|
||
|
the screen buffer. The dimensions are in rows and columns for
|
||
|
textmode screen buffers.
|
||
|
Return value:
|
||
|
|
||
|
TRUE - The operation was successful.
|
||
|
|
||
|
FALSE/NULL - The operation failed. Extended error status is available
|
||
|
using GetLastError.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
CONSOLE_API_MSG m;
|
||
|
PCONSOLE_SETDISPLAYMODE_MSG a = &m.u.SetConsoleDisplayMode;
|
||
|
NTSTATUS Status;
|
||
|
|
||
|
#if !defined(_X86_)
|
||
|
return FALSE;
|
||
|
#else
|
||
|
|
||
|
Status = NtCreateEvent(&(a->hEvent),
|
||
|
EVENT_ALL_ACCESS,
|
||
|
NULL,
|
||
|
SynchronizationEvent,
|
||
|
(BOOLEAN)FALSE
|
||
|
);
|
||
|
if (!NT_SUCCESS(Status)) {
|
||
|
SET_LAST_NT_ERROR(Status);
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
a->OutputHandle = hConsoleOutput;
|
||
|
a->dwFlags = dwFlags;
|
||
|
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
NULL,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepSetDisplayMode
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
if (!NT_SUCCESS( m.ReturnValue)) {
|
||
|
SET_LAST_NT_ERROR(m.ReturnValue);
|
||
|
NtClose(a->hEvent);
|
||
|
return FALSE;
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
Status = NtWaitForSingleObject(a->hEvent, FALSE, NULL);
|
||
|
NtClose(a->hEvent);
|
||
|
|
||
|
if (Status != 0) {
|
||
|
SET_LAST_NT_ERROR(Status);
|
||
|
return FALSE;
|
||
|
}
|
||
|
try {
|
||
|
*lpNewScreenBufferDimensions = a->ScreenBufferDimensions;
|
||
|
} except( EXCEPTION_EXECUTE_HANDLER ) {
|
||
|
SET_LAST_ERROR(ERROR_INVALID_ACCESS);
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
APIENTRY
|
||
|
RegisterConsoleVDM(
|
||
|
IN DWORD dwRegisterFlags,
|
||
|
IN HANDLE hStartHardwareEvent,
|
||
|
IN HANDLE hEndHardwareEvent,
|
||
|
IN HANDLE hErrorHardwareEvent,
|
||
|
IN DWORD Reserved,
|
||
|
OUT LPDWORD lpStateLength,
|
||
|
OUT PVOID *lpState,
|
||
|
IN LPWSTR lpVDMBufferSectionName,
|
||
|
IN DWORD dwVDMBufferSectionNameLength,
|
||
|
IN COORD VDMBufferSize OPTIONAL,
|
||
|
OUT PVOID *lpVDMBuffer
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
This routine registers the VDM with the console.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
hStartHardwareEvent - the event the VDM waits on to be
|
||
|
notified of gaining/losing control of the hardware.
|
||
|
|
||
|
hEndHardwareEvent - the event the VDM sets when it is done
|
||
|
saving/restoring the hardware.
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - The operation was successful.
|
||
|
|
||
|
FALSE/NULL - The operation failed. Extended error status is available
|
||
|
using GetLastError.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
CONSOLE_API_MSG m;
|
||
|
PCONSOLE_REGISTERVDM_MSG a = &m.u.RegisterConsoleVDM;
|
||
|
PCSR_CAPTURE_HEADER CaptureBuffer;
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
a->RegisterFlags = dwRegisterFlags;
|
||
|
if (dwRegisterFlags) {
|
||
|
a->StartEvent = hStartHardwareEvent;
|
||
|
a->EndEvent = hEndHardwareEvent;
|
||
|
a->ErrorEvent = hErrorHardwareEvent;
|
||
|
a->VDMBufferSectionNameLength = dwVDMBufferSectionNameLength;
|
||
|
a->VDMBufferSize = VDMBufferSize;
|
||
|
CaptureBuffer = CsrAllocateCaptureBuffer( 1,
|
||
|
dwVDMBufferSectionNameLength
|
||
|
);
|
||
|
if (CaptureBuffer == NULL) {
|
||
|
SET_LAST_ERROR(ERROR_NOT_ENOUGH_MEMORY);
|
||
|
return FALSE;
|
||
|
}
|
||
|
CsrCaptureMessageBuffer( CaptureBuffer,
|
||
|
lpVDMBufferSectionName,
|
||
|
dwVDMBufferSectionNameLength,
|
||
|
(PVOID *) &a->VDMBufferSectionName
|
||
|
);
|
||
|
} else {
|
||
|
CaptureBuffer = NULL;
|
||
|
}
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
CaptureBuffer,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepRegisterVDM
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
if (CaptureBuffer != NULL) {
|
||
|
CsrFreeCaptureBuffer( CaptureBuffer );
|
||
|
}
|
||
|
if (!NT_SUCCESS( m.ReturnValue)) {
|
||
|
SET_LAST_NT_ERROR(m.ReturnValue);
|
||
|
return FALSE;
|
||
|
}
|
||
|
else {
|
||
|
if (dwRegisterFlags) {
|
||
|
try {
|
||
|
*lpStateLength = a->StateLength;
|
||
|
*lpState = a->StateBuffer;
|
||
|
*lpVDMBuffer = a->VDMBuffer;
|
||
|
} except (EXCEPTION_EXECUTE_HANDLER) {
|
||
|
SET_LAST_ERROR(ERROR_INVALID_ACCESS);
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
APIENTRY
|
||
|
GetConsoleHardwareState(
|
||
|
IN HANDLE hConsoleOutput,
|
||
|
OUT PCOORD lpResolution,
|
||
|
OUT PCOORD lpFontSize
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
This routine returns the video resolution and font.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
hConsoleOutput - Supplies a console output handle.
|
||
|
|
||
|
lpResolution - Pointer to structure to store screen
|
||
|
resolution in. Resolution is returned in pixels.
|
||
|
|
||
|
lpFontSize - Pointer to structure to store font size in.
|
||
|
Font size is returned in pixels.
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - The operation was successful.
|
||
|
|
||
|
FALSE/NULL - The operation failed. Extended error status is available
|
||
|
using GetLastError.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
CONSOLE_API_MSG m;
|
||
|
PCONSOLE_GETHARDWARESTATE_MSG a = &m.u.GetConsoleHardwareState;
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
a->OutputHandle = hConsoleOutput;
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
NULL,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepGetHardwareState
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
if (!NT_SUCCESS( m.ReturnValue)) {
|
||
|
SET_LAST_NT_ERROR(m.ReturnValue);
|
||
|
return FALSE;
|
||
|
}
|
||
|
else {
|
||
|
try {
|
||
|
*lpResolution = a->Resolution;
|
||
|
*lpFontSize = a->FontSize;
|
||
|
} except( EXCEPTION_EXECUTE_HANDLER ) {
|
||
|
SET_LAST_ERROR(ERROR_INVALID_ACCESS);
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
APIENTRY
|
||
|
SetConsoleHardwareState(
|
||
|
IN HANDLE hConsoleOutput,
|
||
|
IN COORD dwResolution,
|
||
|
IN COORD dwFontSize
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
This routine set the video resolution and font.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
hConsoleOutput - Supplies a console output handle.
|
||
|
|
||
|
dwResolution - Contains screen resolution to set.
|
||
|
Resolution is returned in pixels.
|
||
|
|
||
|
dwFontSize - Contains font size to set.
|
||
|
Font size is returned in pixels.
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - The operation was successful.
|
||
|
|
||
|
FALSE/NULL - The operation failed. Extended error status is available
|
||
|
using GetLastError.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
CONSOLE_API_MSG m;
|
||
|
PCONSOLE_SETHARDWARESTATE_MSG a = &m.u.SetConsoleHardwareState;
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
a->OutputHandle = hConsoleOutput;
|
||
|
a->Resolution = dwResolution;
|
||
|
a->FontSize = dwFontSize;
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
NULL,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepSetHardwareState
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
if (!NT_SUCCESS( m.ReturnValue)) {
|
||
|
SET_LAST_NT_ERROR(m.ReturnValue);
|
||
|
return FALSE;
|
||
|
}
|
||
|
else {
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
APIENTRY
|
||
|
GetConsoleDisplayMode(
|
||
|
OUT LPDWORD lpModeFlags
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
This routine returns the display mode of the console.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
lpModeFlags - pointer to store display mode in.
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - The operation was successful.
|
||
|
|
||
|
FALSE/NULL - The operation failed. Extended error status is available
|
||
|
using GetLastError.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
CONSOLE_API_MSG m;
|
||
|
PCONSOLE_GETDISPLAYMODE_MSG a = &m.u.GetConsoleDisplayMode;
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
NULL,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepGetDisplayMode
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
if (!NT_SUCCESS( m.ReturnValue)) {
|
||
|
SET_LAST_NT_ERROR(m.ReturnValue);
|
||
|
return FALSE;
|
||
|
}
|
||
|
else {
|
||
|
try {
|
||
|
*lpModeFlags = a->ModeFlags;
|
||
|
} except( EXCEPTION_EXECUTE_HANDLER ) {
|
||
|
SET_LAST_ERROR(ERROR_INVALID_ACCESS);
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
APIENTRY
|
||
|
SetConsoleKeyShortcuts(
|
||
|
IN BOOL bSet,
|
||
|
IN BYTE bReserveKeys,
|
||
|
IN LPAPPKEY lpAppKeys,
|
||
|
IN DWORD dwNumAppKeys
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
Only one set of key shortcuts is valid per console. Calling
|
||
|
SetConsoleKeyShortcuts(set) overwrites any previous settings.
|
||
|
SetConsoleKeyShortcuts(!set) removes any shortcuts.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
bSet - if TRUE, set shortcuts. else remove shortcuts.
|
||
|
|
||
|
bReserveKeys - byte containing reserve key info.
|
||
|
|
||
|
lpAppKeys - pointer to application-defined shortcut keys. can be null.
|
||
|
|
||
|
dwNumAppKeys - number of app keys contained in lpAppKeys.
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - The operation was successful.
|
||
|
|
||
|
FALSE/NULL - The operation failed. Extended error status is available
|
||
|
using GetLastError.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
CONSOLE_API_MSG m;
|
||
|
PCONSOLE_SETKEYSHORTCUTS_MSG a = &m.u.SetConsoleKeyShortcuts;
|
||
|
PCSR_CAPTURE_HEADER CaptureBuffer;
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
a->Set = bSet;
|
||
|
a->ReserveKeys = bReserveKeys;
|
||
|
if (lpAppKeys == NULL || dwNumAppKeys == 0) {
|
||
|
a->NumAppKeys = 0;
|
||
|
CaptureBuffer = NULL;
|
||
|
} else {
|
||
|
a->NumAppKeys = dwNumAppKeys;
|
||
|
CaptureBuffer = CsrAllocateCaptureBuffer( 1,
|
||
|
dwNumAppKeys * sizeof(APPKEY)
|
||
|
);
|
||
|
if (CaptureBuffer == NULL) {
|
||
|
SET_LAST_ERROR(ERROR_NOT_ENOUGH_MEMORY);
|
||
|
return FALSE;
|
||
|
}
|
||
|
CsrCaptureMessageBuffer( CaptureBuffer,
|
||
|
lpAppKeys,
|
||
|
dwNumAppKeys * sizeof(APPKEY),
|
||
|
(PVOID *) &a->AppKeys
|
||
|
);
|
||
|
}
|
||
|
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
CaptureBuffer,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepSetKeyShortcuts
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
if (CaptureBuffer)
|
||
|
CsrFreeCaptureBuffer( CaptureBuffer );
|
||
|
if (!NT_SUCCESS( m.ReturnValue)) {
|
||
|
SET_LAST_NT_ERROR(m.ReturnValue);
|
||
|
return FALSE;
|
||
|
}
|
||
|
else {
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
APIENTRY
|
||
|
SetConsoleMenuClose(
|
||
|
IN BOOL bEnable
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
This routine returns the display mode of the console.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
bEnable - if TRUE, close is enabled in the system menu.
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - The operation was successful.
|
||
|
|
||
|
FALSE/NULL - The operation failed. Extended error status is available
|
||
|
using GetLastError.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
CONSOLE_API_MSG m;
|
||
|
PCONSOLE_SETMENUCLOSE_MSG a = &m.u.SetConsoleMenuClose;
|
||
|
|
||
|
a->ConsoleHandle = GET_CONSOLE_HANDLE;
|
||
|
a->Enable = bEnable;
|
||
|
CsrClientCallServer( (PCSR_API_MSG)&m,
|
||
|
NULL,
|
||
|
CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX,
|
||
|
ConsolepSetMenuClose
|
||
|
),
|
||
|
sizeof( *a )
|
||
|
);
|
||
|
if (!NT_SUCCESS( m.ReturnValue)) {
|
||
|
SET_LAST_NT_ERROR(m.ReturnValue);
|
||
|
return FALSE;
|
||
|
}
|
||
|
else {
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif //!defined(BUILD_WOW6432)
|
||
|
|
||
|
#if !defined(BUILD_WOW64)
|
||
|
|
||
|
BOOL
|
||
|
SetConsolePalette(
|
||
|
IN HANDLE hConsoleOutput,
|
||
|
IN HPALETTE hPalette,
|
||
|
IN UINT dwUsage
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
Sets the palette for the console screen buffer.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
hOutput - Supplies a console output handle.
|
||
|
|
||
|
hPalette - Supplies a handle to the palette to set.
|
||
|
|
||
|
dwUsage - Specifies use of the system palette.
|
||
|
|
||
|
SYSPAL_NOSTATIC - System palette contains no static colors
|
||
|
except black and white.
|
||
|
|
||
|
SYSPAL_STATIC - System palette contains static colors
|
||
|
which will not change when an application
|
||
|
realizes its logical palette.
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - The operation was successful.
|
||
|
|
||
|
FALSE/NULL - The operation failed. Extended error status is available
|
||
|
using GetLastError.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
HANDLE hmodGdi;
|
||
|
UNICODE_STRING ModuleNameString;
|
||
|
NTSTATUS Status;
|
||
|
|
||
|
if ( !pfnGdiConvertPalette ) {
|
||
|
RtlInitUnicodeString( &ModuleNameString, L"gdi32" );
|
||
|
Status = LdrLoadDll( UNICODE_NULL, NULL, &ModuleNameString, &hmodGdi );
|
||
|
if ( !NT_SUCCESS(Status) ) {
|
||
|
SET_LAST_NT_ERROR(Status);
|
||
|
return FALSE;
|
||
|
}
|
||
|
pfnGdiConvertPalette = (PCONVPALFUNC)GetProcAddress(hmodGdi, "GdiConvertPalette");
|
||
|
if (pfnGdiConvertPalette == NULL) {
|
||
|
SET_LAST_NT_ERROR(STATUS_PROCEDURE_NOT_FOUND);
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
hPalette = (*pfnGdiConvertPalette)(hPalette);
|
||
|
|
||
|
return SetConsolePaletteInternal(hConsoleOutput,
|
||
|
hPalette,
|
||
|
dwUsage);
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
APIENTRY
|
||
|
WriteConsoleInputVDMA(
|
||
|
HANDLE hConsoleInput,
|
||
|
PINPUT_RECORD lpBuffer,
|
||
|
DWORD nLength,
|
||
|
LPDWORD lpNumberOfEventsWritten
|
||
|
)
|
||
|
{
|
||
|
return WriteConsoleInputInternal(hConsoleInput,lpBuffer,nLength,lpNumberOfEventsWritten,FALSE,FALSE);
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
APIENTRY
|
||
|
WriteConsoleInputVDMW(
|
||
|
HANDLE hConsoleInput,
|
||
|
PINPUT_RECORD lpBuffer,
|
||
|
DWORD nLength,
|
||
|
LPDWORD lpNumberOfEventsWritten
|
||
|
)
|
||
|
{
|
||
|
return WriteConsoleInputInternal(hConsoleInput,lpBuffer,nLength,lpNumberOfEventsWritten,TRUE,FALSE);
|
||
|
}
|
||
|
|
||
|
#endif //!defined(BUILD_WOW6432)
|