767 lines
35 KiB
C
767 lines
35 KiB
C
/*++
|
|
Copyright (c) 1985 - 1999, Microsoft Corporation
|
|
|
|
Module Name:
|
|
consrv.h
|
|
|
|
Abstract:
|
|
This module contains the include files and definitions for the console server DLL.
|
|
|
|
Author:
|
|
Therese Stowell (thereses) 16-Nov-1990
|
|
*/
|
|
|
|
#if DBG && defined(DEBUG_PRINT)
|
|
#define _DBGFONTS 0x00000001
|
|
#define _DBGFONTS2 0x00000002
|
|
#define _DBGCHARS 0x00000004
|
|
#define _DBGOUTPUT 0x00000008
|
|
#define _DBGFULLSCR 0x00000008
|
|
#define _DBGALL 0xFFFFFFFF
|
|
extern ULONG gDebugFlag;
|
|
|
|
#define DBGFONTS(_params_) {if (gDebugFlag & _DBGFONTS) DbgPrint _params_ ; }
|
|
#define DBGFONTS2(_params_) {if (gDebugFlag & _DBGFONTS2) DbgPrint _params_ ; }
|
|
#define DBGCHARS(_params_) {if (gDebugFlag & _DBGCHARS) DbgPrint _params_ ; }
|
|
#define DBGOUTPUT(_params_) {if (gDebugFlag & _DBGOUTPUT) DbgPrint _params_ ; }
|
|
#define DBGFULLSCR(_params_) {if (gDebugFlag & _DBGFULLSCR)DbgPrint _params_ ; }
|
|
#define DBGPRINT(_params_) DbgPrint _params_
|
|
#else
|
|
#define DBGFONTS(_params_)
|
|
#define DBGFONTS2(_params_)
|
|
#define DBGCHARS(_params_)
|
|
#define DBGOUTPUT(_params_)
|
|
#define DBGFULLSCR(_params_)
|
|
#define DBGPRINT(_params_)
|
|
#endif
|
|
|
|
#ifdef LATER
|
|
#if DBG
|
|
#undef RIP_COMPONENT
|
|
#define RIP_COMPONENT RIP_CONSRV
|
|
#undef ASSERT
|
|
#define ASSERT(exp) UserAssert(exp)
|
|
#endif
|
|
#endif
|
|
|
|
#define CONSOLE_MAX_FONT_NAME_LENGTH 256
|
|
#define DATA_CHUNK_SIZE 8192
|
|
#define MAKE_TAG( t ) (RTL_HEAP_MAKE_TAG( dwConBaseTag, t ))
|
|
|
|
#define TMP_TAG 0
|
|
#define BMP_TAG 1
|
|
#define ALIAS_TAG 2
|
|
#define HISTORY_TAG 3
|
|
#define TITLE_TAG 4
|
|
#define HANDLE_TAG 5
|
|
#define CONSOLE_TAG 6
|
|
#define ICON_TAG 7
|
|
#define BUFFER_TAG 8
|
|
#define WAIT_TAG 9
|
|
#define FONT_TAG 10
|
|
#define SCREEN_TAG 11
|
|
#if defined(FE_SB)
|
|
#define TMP_DBCS_TAG 12
|
|
#define SCREEN_DBCS_TAG 13
|
|
#define EUDC_TAG 14
|
|
#define CONVAREA_TAG 15
|
|
#define IME_TAG 16
|
|
#endif
|
|
|
|
#define GetWindowConsole(hWnd) (PCONSOLE_INFORMATION)GetWindowLongPtr((hWnd), GWLP_USERDATA)
|
|
|
|
/*
|
|
* Used to store some console attributes for the console.
|
|
* This is a means to cache the color in the extra-window-bytes, so USER/KERNEL can get at it for hungapp drawing.
|
|
* The window-offsets are defined in NTUSER\INC.
|
|
|
|
* The other macros are just convenient means for setting the other window bytes.
|
|
*/
|
|
#define SetConsoleBkColor(hw,clr) SetWindowLong(hw, GWL_CONSOLE_BKCOLOR, clr)
|
|
#define SetConsolePid(hw,pid) SetWindowLong(hw, GWL_CONSOLE_PID, pid)
|
|
#define SetConsoleTid(hw,tid) SetWindowLong(hw, GWL_CONSOLE_TID, tid)
|
|
|
|
/*
|
|
* helpful macros
|
|
*/
|
|
#define NELEM(array) (sizeof(array)/sizeof(array[0]))
|
|
|
|
// Text Information from PSCREEN_INFORMATION
|
|
__inline BYTE SCR_FAMILY(PSCREEN_INFORMATION pScreen) {
|
|
return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.Family;
|
|
}
|
|
|
|
__inline DWORD SCR_FONTNUMBER(PSCREEN_INFORMATION pScreen) {
|
|
return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.FontNumber;
|
|
}
|
|
|
|
__inline LPWSTR SCR_FACENAME(PSCREEN_INFORMATION pScreen) {
|
|
return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.FaceName;
|
|
}
|
|
|
|
__inline COORD SCR_FONTSIZE(PSCREEN_INFORMATION pScreen) {
|
|
return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.FontSize;
|
|
}
|
|
|
|
__inline LONG SCR_FONTWEIGHT(PSCREEN_INFORMATION pScreen) {
|
|
return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.Weight;
|
|
}
|
|
|
|
__inline UINT SCR_FONTCODEPAGE(PSCREEN_INFORMATION pScreen) {
|
|
return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.FontCodePage;
|
|
}
|
|
|
|
|
|
// Text Information from PCONSOLE_INFORMATION
|
|
#define CON_FAMILY(pCon) SCR_FAMILY((pCon)->CurrentScreenBuffer)
|
|
#define CON_FONTNUMBER(pCon) SCR_FONTNUMBER((pCon)->CurrentScreenBuffer)
|
|
#define CON_FACENAME(pCon) SCR_FACENAME((pCon)->CurrentScreenBuffer)
|
|
#define CON_FONTSIZE(pCon) SCR_FONTSIZE((pCon)->CurrentScreenBuffer)
|
|
#define CON_FONTWEIGHT(pCon) SCR_FONTWEIGHT((pCon)->CurrentScreenBuffer)
|
|
#define CON_FONTCODEPAGE(pCon) SCR_FONTCODEPAGE((pCon)->CurrentScreenBuffer)
|
|
|
|
#if defined(FE_SB)
|
|
extern BOOLEAN gfIsDBCSACP; // TRUE if System ACP is associated with DBCS font
|
|
#define CONSOLE_IS_DBCS_ENABLED() (gfIsDBCSACP)
|
|
#define CONSOLE_IS_IME_ENABLED() (gfIsDBCSACP)
|
|
#define CONSOLE_IS_DBCS_OUTPUTCP(Console) ((Console)->fIsDBCSOutputCP)
|
|
#define CONSOLE_IS_DBCS_CP(Console) ((Console)->fIsDBCSCP)
|
|
#else // FE_SB
|
|
#define CONSOLE_IS_DBCS_ENABLED() (FALSE)
|
|
#define CONSOLE_IS_IME_ENABLED() (FALSE)
|
|
#endif // FE_SB
|
|
|
|
#ifdef UNICODE
|
|
#define LoadStringEx LoadStringExW
|
|
#else
|
|
#define LoadStringEx LoadStringExA
|
|
#endif
|
|
|
|
// Cache the heap pointer for use by memory routines.
|
|
extern PWIN32HEAP pConHeap;
|
|
extern DWORD dwConBaseTag;
|
|
|
|
// Make sure the console heap is still valid.
|
|
#define ValidateConsoleHeap() \
|
|
if (NtCurrentPeb()->BeingDebugged) { \
|
|
RtlValidateHeap(Win32HeapGetHandle(pConHeap), 0, NULL); \
|
|
}
|
|
|
|
// Wrappers for console heap code.
|
|
#define ConsoleHeapAlloc(Flags, Size) \
|
|
Win32HeapAlloc(pConHeap, Size, Flags, Flags)
|
|
|
|
#define ConsoleHeapReAlloc(Flags, Address, Size) Win32HeapReAlloc(pConHeap, Address, Size, Flags)
|
|
|
|
#if DBG
|
|
#define ConsoleHeapFree(Address) \
|
|
{ \
|
|
Win32HeapFree(pConHeap, Address); \
|
|
Address = (PVOID)0xBAADF00D; \
|
|
}
|
|
#else
|
|
#define ConsoleHeapFree(Address) \
|
|
{ \
|
|
Win32HeapFree(pConHeap, Address); \
|
|
}
|
|
#endif
|
|
|
|
#define ConsoleHeapSize(Address) Win32HeapSize(pConHeap, Address)
|
|
|
|
// handle.c
|
|
|
|
NTSTATUS ConsoleAddProcessRoutine(IN PCSR_PROCESS ParentProcess, IN PCSR_PROCESS Process);
|
|
NTSTATUS DereferenceConsoleHandle(IN HANDLE ConsoleHandle, OUT PCONSOLE_INFORMATION *Console);
|
|
NTSTATUS AllocateConsoleHandle(OUT PHANDLE Handle);
|
|
NTSTATUS FreeConsoleHandle(IN HANDLE Handle);
|
|
NTSTATUS ValidateConsole(IN PCONSOLE_INFORMATION Console);
|
|
NTSTATUS ApiPreamble(IN HANDLE ConsoleHandle, OUT PCONSOLE_INFORMATION *Console);
|
|
NTSTATUS RevalidateConsole(IN HANDLE ConsoleHandle, OUT PCONSOLE_INFORMATION *Console);
|
|
NTSTATUS InitializeConsoleHandleTable( VOID );
|
|
#ifdef DEBUG
|
|
VOID LockConsoleHandleTable(VOID);
|
|
VOID UnlockConsoleHandleTable(VOID);
|
|
VOID LockConsole(IN PCONSOLE_INFORMATION Console);
|
|
#else
|
|
#define LockConsoleHandleTable() RtlEnterCriticalSection(&ConsoleHandleLock)
|
|
#define UnlockConsoleHandleTable() RtlLeaveCriticalSection(&ConsoleHandleLock)
|
|
#define LockConsole(Con) RtlEnterCriticalSection(&(Con)->ConsoleLock)
|
|
#endif
|
|
|
|
#define ConvertAttrToRGB(Con, Attr) ((Con)->ColorTable[(Attr) & 0x0F])
|
|
|
|
BOOLEAN UnProtectHandle(HANDLE hObject);
|
|
NTSTATUS AllocateConsole(
|
|
IN HANDLE ConsoleHandle,
|
|
IN LPWSTR Title,
|
|
IN USHORT TitleLength,
|
|
IN HANDLE ClientProcessHandle,
|
|
OUT PHANDLE StdIn,
|
|
OUT PHANDLE StdOut,
|
|
OUT PHANDLE StdErr,
|
|
OUT PCONSOLE_PER_PROCESS_DATA ProcessData,
|
|
IN OUT PCONSOLE_INFO ConsoleInfo,
|
|
IN BOOLEAN WindowVisible,
|
|
IN DWORD ConsoleThreadId
|
|
);
|
|
|
|
VOID DestroyConsole(IN PCONSOLE_INFORMATION Console);
|
|
VOID FreeCon(IN PCONSOLE_INFORMATION Console);
|
|
VOID InsertScreenBuffer(IN PCONSOLE_INFORMATION Console, IN PSCREEN_INFORMATION ScreenInfo);
|
|
VOID RemoveScreenBuffer(IN PCONSOLE_INFORMATION Console, IN PSCREEN_INFORMATION ScreenInfo);
|
|
VOID FreeProcessData(IN PCONSOLE_PER_PROCESS_DATA ProcessData);
|
|
NTSTATUS AllocateIoHandle(IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN ULONG HandleType, OUT PHANDLE Handle);
|
|
NTSTATUS GrowIoHandleTable(IN PCONSOLE_PER_PROCESS_DATA ProcessData);
|
|
NTSTATUS FreeIoHandle(IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN HANDLE Handle);
|
|
NTSTATUS DereferenceIoHandleNoCheck(IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN HANDLE Handle, OUT PHANDLE_DATA *HandleData);
|
|
NTSTATUS DereferenceIoHandle(IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN HANDLE Handle, IN ULONG HandleType, IN ACCESS_MASK Access, OUT PHANDLE_DATA *HandleData);
|
|
BOOLEAN InitializeInputHandle(PHANDLE_DATA HandleData, PINPUT_INFORMATION InputBuffer);
|
|
VOID InitializeOutputHandle(PHANDLE_DATA HandleData, PSCREEN_INFORMATION ScreenBuffer);
|
|
ULONG SrvVerifyConsoleIoHandle(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
|
|
// share.c
|
|
|
|
NTSTATUS ConsoleAddShare(IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN OUT PCONSOLE_SHARE_ACCESS ShareAccess, IN OUT PHANDLE_DATA HandleData);
|
|
NTSTATUS ConsoleDupShare(IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN OUT PCONSOLE_SHARE_ACCESS ShareAccess, IN OUT PHANDLE_DATA TargetHandleData);
|
|
NTSTATUS ConsoleRemoveShare(IN ULONG DesiredAccess, IN ULONG DesiredShareAccess, IN OUT PCONSOLE_SHARE_ACCESS ShareAccess);
|
|
|
|
// find.c
|
|
|
|
VOID DoFind(IN PCONSOLE_INFORMATION Console);
|
|
|
|
// output.c
|
|
|
|
VOID ScrollScreen(IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT ScrollRect, IN PSMALL_RECT MergeRect, IN COORD TargetPoint);
|
|
VOID SetProcessForegroundRights(IN PCSR_PROCESS Process, IN BOOL Foreground);
|
|
VOID SetProcessFocus(IN PCSR_PROCESS Process, IN BOOL Foreground);
|
|
VOID ModifyConsoleProcessFocus(IN PCONSOLE_INFORMATION Console, IN BOOL Foreground);
|
|
VOID InitializeSystemMetrics( VOID );
|
|
VOID InitializeScreenInfo( VOID );
|
|
NTSTATUS ReadScreenBuffer(IN PSCREEN_INFORMATION ScreenInformation, OUT PCHAR_INFO Buffer, IN OUT PSMALL_RECT ReadRegion);
|
|
NTSTATUS WriteScreenBuffer(IN PSCREEN_INFORMATION ScreenInformation, OUT PCHAR_INFO Buffer, IN OUT PSMALL_RECT WriteRegion);
|
|
NTSTATUS DoCreateScreenBuffer(IN PCONSOLE_INFORMATION Console, IN PCONSOLE_INFO ConsoleInfo);
|
|
NTSTATUS CreateScreenBuffer(
|
|
OUT PSCREEN_INFORMATION *ScreenInformation,
|
|
IN COORD dwWindowSize OPTIONAL,
|
|
IN DWORD nFont OPTIONAL,
|
|
IN COORD dwScreenBufferSize OPTIONAL,
|
|
IN CHAR_INFO Fill,
|
|
IN CHAR_INFO PopupFill,
|
|
IN PCONSOLE_INFORMATION Console,
|
|
IN DWORD Flags,
|
|
IN PCONSOLE_GRAPHICS_BUFFER_INFO GraphicsBufferInfo OPTIONAL,
|
|
OUT PVOID *lpBitmap,
|
|
OUT HANDLE *hMutex,
|
|
IN UINT CursorSize,
|
|
IN LPWSTR FaceName
|
|
);
|
|
VOID AbortCreateConsole(IN PCONSOLE_INFORMATION Console);
|
|
NTSTATUS CreateWindowsWindow(IN PCONSOLE_INFORMATION Console);
|
|
VOID DestroyWindowsWindow(IN PCONSOLE_INFORMATION Console);
|
|
NTSTATUS FreeScreenBuffer(IN PSCREEN_INFORMATION ScreenInformation);
|
|
NTSTATUS ReadOutputString(
|
|
IN PSCREEN_INFORMATION ScreenInfo,
|
|
OUT PVOID Buffer,
|
|
IN COORD ReadCoord,
|
|
IN ULONG StringType,
|
|
IN OUT PULONG NumRecords // this value is valid even for error cases
|
|
);
|
|
NTSTATUS InitializeScrollBuffer( VOID );
|
|
NTSTATUS GetScreenBufferInformation(
|
|
IN PSCREEN_INFORMATION ScreenInfo,
|
|
OUT PCOORD Size,
|
|
OUT PCOORD CursorPosition,
|
|
OUT PCOORD ScrollPosition,
|
|
OUT PWORD Attributes,
|
|
OUT PCOORD CurrentWindowSize,
|
|
OUT PCOORD MaximumWindowSize
|
|
);
|
|
VOID GetWindowLimits(IN PSCREEN_INFORMATION ScreenInfo, OUT PWINDOW_LIMITS WindowLimits);
|
|
NTSTATUS ResizeWindow(IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT WindowDimensions, IN BOOL DoScrollBarUpdate);
|
|
NTSTATUS ResizeScreenBuffer(IN PSCREEN_INFORMATION ScreenInfo, IN COORD NewScreenSize, IN BOOL DoScrollBarUpdate);
|
|
NTSTATUS ScrollRegion(IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT ScrollRectangle, IN PSMALL_RECT ClipRectangle OPTIONAL, IN COORD DestinationOrigin, IN CHAR_INFO Fill);
|
|
NTSTATUS SetWindowOrigin(IN PSCREEN_INFORMATION ScreenInfo, IN BOOLEAN Absolute, IN OUT COORD WindowOrigin);
|
|
VOID SetWindowSize(IN PSCREEN_INFORMATION ScreenInfo);
|
|
NTSTATUS SetActiveScreenBuffer(IN PSCREEN_INFORMATION ScreenInfo);
|
|
NTSTATUS QueueConsoleMessage(PCONSOLE_INFORMATION Console, UINT Message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT APIENTRY ConsoleWindowProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam);
|
|
VOID VerticalScroll(IN PCONSOLE_INFORMATION Console, IN PSCREEN_INFORMATION ScreenInfo, IN WORD ScrollCommand, IN WORD AbsoluteChange);
|
|
VOID HorizontalScroll(IN PSCREEN_INFORMATION ScreenInfo, IN WORD ScrollCommand, IN WORD AbsoluteChange);
|
|
VOID StreamScrollRegion(IN PSCREEN_INFORMATION ScreenInfo);
|
|
#if defined(FE_SB)
|
|
VOID FindAttrIndex(IN PATTR_PAIR String, IN SHORT Index, OUT PATTR_PAIR *IndexedAttr, OUT PSHORT CountOfAttr);
|
|
VOID UpdateComplexRegion(IN PSCREEN_INFORMATION ScreenInfo, IN COORD FontSize);
|
|
SHORT ScrollEntireScreen(IN PSCREEN_INFORMATION ScreenInfo, IN SHORT ScrollValue, IN BOOL UpdateRowIndex);
|
|
VOID UpdateScrollBars(IN PSCREEN_INFORMATION ScreenInfo);
|
|
#endif
|
|
VOID ReadRectFromScreenBuffer(IN PSCREEN_INFORMATION ScreenInfo, IN COORD SourcePoint, IN PCHAR_INFO Target, IN COORD TargetSize, IN PSMALL_RECT TargetRect);
|
|
VOID InitializeThreadMessages(VOID);
|
|
NTSTATUS QueueThreadMessage(DWORD dwThreadId, UINT Message, WPARAM wParam, LPARAM lParam);
|
|
BOOL UnqueueThreadMessage(DWORD dwThreadId, UINT* pMessage, WPARAM* pwParam, LPARAM* plParam);
|
|
|
|
// Drag/Drop on console windows (output.c)
|
|
|
|
UINT ConsoleDragQueryFile(IN HANDLE hDrop, IN PVOID lpFile, IN UINT cb);
|
|
VOID DoDrop (IN WPARAM wParam, IN PCONSOLE_INFORMATION Console);
|
|
|
|
// input.c
|
|
|
|
NTSTATUS ReadBuffer(
|
|
IN PINPUT_INFORMATION InputInformation,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG EventsRead,
|
|
IN BOOL Peek,
|
|
IN BOOL StreamRead,
|
|
OUT PBOOL ResetWaitEvent,
|
|
IN BOOLEAN Unicode
|
|
);
|
|
VOID ConsoleInputThread(IN PINPUT_THREAD_INIT_INFO pInputThreadInitInfo);
|
|
VOID StoreKeyInfo(IN PMSG msg);
|
|
VOID RetrieveKeyInfo(IN HWND hWnd, OUT PWORD pwVirtualKeyCode, OUT PWORD pwVirtualScanCode, IN BOOL FreeKeyInfo);
|
|
VOID ClearKeyInfo(IN HWND hWnd);
|
|
NTSTATUS ReadInputBuffer(
|
|
IN PINPUT_INFORMATION InputInformation,
|
|
OUT PINPUT_RECORD lpBuffer,
|
|
IN OUT PDWORD nLength,
|
|
IN BOOL Peek,
|
|
IN BOOL WaitForData,
|
|
IN BOOL StreamRead,
|
|
IN PCONSOLE_INFORMATION Console,
|
|
IN PHANDLE_DATA HandleData OPTIONAL,
|
|
IN PCSR_API_MSG Message OPTIONAL,
|
|
IN CSR_WAIT_ROUTINE WaitRoutine OPTIONAL,
|
|
IN PVOID WaitParameter OPTIONAL,
|
|
IN ULONG WaitParameterLength OPTIONAL,
|
|
IN BOOLEAN WaitBlockExists OPTIONAL
|
|
#if defined(FE_SB)
|
|
,
|
|
IN BOOLEAN Unicode
|
|
#endif
|
|
);
|
|
|
|
DWORD WriteInputBuffer(PCONSOLE_INFORMATION Console, PINPUT_INFORMATION InputBufferInformation, PINPUT_RECORD lpBuffer, DWORD nLength);
|
|
DWORD PrependInputBuffer(PCONSOLE_INFORMATION Console, PINPUT_INFORMATION InputBufferInformation, PINPUT_RECORD lpBuffer, DWORD nLength);
|
|
NTSTATUS CreateInputBuffer(
|
|
IN ULONG NumberOfEvents OPTIONAL,
|
|
IN PINPUT_INFORMATION InputBufferInformation
|
|
#if defined(FE_SB)
|
|
,
|
|
IN PCONSOLE_INFORMATION Console
|
|
#endif
|
|
);
|
|
|
|
NTSTATUS ReinitializeInputBuffer(OUT PINPUT_INFORMATION InputBufferInformation);
|
|
VOID FreeInputBuffer(IN PINPUT_INFORMATION InputBufferInformation);
|
|
|
|
#if defined(FE_SB)
|
|
VOID ProcessCreateConsoleWindow(IN LPMSG lpMsg);
|
|
NTSTATUS WaitForMoreToRead(
|
|
IN PINPUT_INFORMATION InputInformation,
|
|
IN PCSR_API_MSG Message OPTIONAL,
|
|
IN CSR_WAIT_ROUTINE WaitRoutine OPTIONAL,
|
|
IN PVOID WaitParameter OPTIONAL,
|
|
IN ULONG WaitParameterLength OPTIONAL,
|
|
IN BOOLEAN WaitBlockExists OPTIONAL
|
|
);
|
|
ULONG GetControlKeyState(LPARAM lParam);
|
|
VOID TerminateRead(IN PCONSOLE_INFORMATION Console, IN PINPUT_INFORMATION InputInfo, IN DWORD Flag);
|
|
#endif
|
|
|
|
NTSTATUS GetNumberOfReadyEvents(IN PINPUT_INFORMATION InputInformation, OUT PULONG NumberOfEvents);
|
|
NTSTATUS FlushInputBuffer(IN PINPUT_INFORMATION InputInformation);
|
|
NTSTATUS FlushAllButKeys(PINPUT_INFORMATION InputInformation);
|
|
NTSTATUS SetInputBufferSize(IN PINPUT_INFORMATION InputInformation, IN ULONG Size);
|
|
BOOL HandleSysKeyEvent(IN PCONSOLE_INFORMATION Console, IN HWND hWnd, IN UINT Message, IN WPARAM wParam, IN LPARAM lParam);
|
|
VOID HandleKeyEvent(IN PCONSOLE_INFORMATION Console, IN HWND hWnd, IN UINT Message, IN WPARAM wParam, IN LPARAM lParam);
|
|
BOOL HandleMouseEvent(IN PCONSOLE_INFORMATION Console, IN PSCREEN_INFORMATION ScreenInfo, IN UINT Message, IN WPARAM wParam, IN LPARAM lParam);
|
|
VOID HandleMenuEvent(IN PCONSOLE_INFORMATION Console, IN DWORD wParam);
|
|
VOID HandleFocusEvent(IN PCONSOLE_INFORMATION Console, IN BOOL bSetFocus);
|
|
VOID HandleCtrlEvent(IN PCONSOLE_INFORMATION Console, IN DWORD EventType);
|
|
|
|
#define CONSOLE_SHUTDOWN_FAILED 0
|
|
#define CONSOLE_SHUTDOWN_SUCCEEDED 1
|
|
#define CONSOLE_SHUTDOWN_SYSTEM 2
|
|
|
|
int CreateCtrlThread(IN PCONSOLE_PROCESS_TERMINATION_RECORD ProcessHandleList, IN ULONG ProcessHandleListLength, IN PWCHAR Title, IN DWORD EventType, IN BOOL fForce);
|
|
VOID UnlockConsole(IN PCONSOLE_INFORMATION Console);
|
|
ULONG ShutdownConsole(IN HANDLE ConsoleHandle, IN DWORD dwFlags);
|
|
|
|
// link.c
|
|
|
|
#define LINK_NOINFO 0
|
|
#define LINK_SIMPLEINFO 1
|
|
#define LINK_FULLINFO 2
|
|
|
|
DWORD GetLinkProperties(LPWSTR pszLinkName, LPVOID lpvBuffer, UINT cb);
|
|
DWORD GetTitleFromLinkName(IN LPWSTR szLinkName, OUT LPWSTR szTitle);
|
|
|
|
// misc.c
|
|
VOID InitializeFonts( VOID );
|
|
BOOL InitializeCustomCP( VOID );
|
|
|
|
#define EF_NEW 0x0001 // a newly available face
|
|
#define EF_OLD 0x0002 // a previously available face
|
|
#define EF_ENUMERATED 0x0004 // all sizes have been enumerated
|
|
#define EF_OEMFONT 0x0008 // an OEM face
|
|
#define EF_TTFONT 0x0010 // a TT face
|
|
#define EF_DEFFACE 0x0020 // the default face
|
|
|
|
NTSTATUS EnumerateFonts( DWORD Flags );
|
|
VOID InitializeMouseButtons( VOID );
|
|
NTSTATUS GetMouseButtons(PULONG NumButtons);
|
|
NTSTATUS FindTextBufferFontInfo(IN PSCREEN_INFORMATION ScreenInfo, IN UINT CodePage, OUT PTEXT_BUFFER_FONT_INFO TextFontInfo);
|
|
NTSTATUS StoreTextBufferFontInfo(
|
|
IN PSCREEN_INFORMATION ScreenInfo,
|
|
IN ULONG FontIndex,
|
|
IN COORD FontSize,
|
|
IN BYTE FontFamily,
|
|
IN LONG FontWeight,
|
|
IN LPWSTR FaceName,
|
|
IN UINT CodePage
|
|
);
|
|
NTSTATUS RemoveTextBufferFontInfo(IN PSCREEN_INFORMATION ScreenInfo);
|
|
NTSTATUS GetNumFonts(OUT PULONG NumberOfFonts);
|
|
NTSTATUS GetAvailableFonts(IN PSCREEN_INFORMATION ScreenInfo, IN BOOLEAN MaximumWindow, OUT PVOID Buffer, IN OUT PULONG NumFonts);
|
|
NTSTATUS GetFontSize(IN DWORD FontIndex, OUT PCOORD FontSize);
|
|
NTSTATUS GetCurrentFont(IN PSCREEN_INFORMATION ScreenInfo, IN BOOLEAN MaximumWindow, OUT PULONG FontIndex, OUT PCOORD FontSize);
|
|
NTSTATUS SetFont(IN PSCREEN_INFORMATION ScreenInfo);
|
|
NTSTATUS SetScreenBufferFont(
|
|
IN PSCREEN_INFORMATION ScreenInfo,
|
|
IN ULONG FontIndex
|
|
#if defined(FE_SB)
|
|
,
|
|
IN UINT CodePage
|
|
#endif
|
|
);
|
|
|
|
int ConvertToOem(IN UINT Codepage, IN LPWSTR Source, IN int SourceLength, OUT LPSTR Target, IN int TargetLength);
|
|
int ConvertInputToUnicode(IN UINT Codepage, IN LPSTR Source, IN int SourceLength, OUT LPWSTR Target, IN int TargetLength);
|
|
#if defined(FE_SB)
|
|
WCHAR SB_CharToWcharGlyph(IN UINT Codepage, IN char Ch);
|
|
WCHAR SB_CharToWchar(IN UINT Codepage, IN char Ch);
|
|
#else
|
|
WCHAR CharToWcharGlyph(IN UINT Codepage, IN char Ch);
|
|
WCHAR CharToWchar(IN UINT Codepage, IN char Ch);
|
|
#endif
|
|
|
|
char WcharToChar(IN UINT Codepage, IN WCHAR Wchar);
|
|
int ConvertOutputToUnicode(IN UINT Codepage, IN LPSTR Source, IN int SourceLength, OUT LPWSTR Target, IN int TargetLength);
|
|
int ConvertOutputToOem(
|
|
IN UINT Codepage,
|
|
IN LPWSTR Source,
|
|
IN int SourceLength, // in chars
|
|
OUT LPSTR Target,
|
|
IN int TargetLength // in chars
|
|
);
|
|
NTSTATUS
|
|
RealUnicodeToFalseUnicode(
|
|
IN OUT LPWSTR Source,
|
|
IN int SourceLength, // in chars
|
|
IN UINT Codepage
|
|
);
|
|
NTSTATUS
|
|
FalseUnicodeToRealUnicode(
|
|
IN OUT LPWSTR Source,
|
|
IN int SourceLength, // in chars
|
|
IN UINT Codepage
|
|
);
|
|
VOID InitializeSubst( VOID );
|
|
VOID ShutdownSubst( VOID );
|
|
ULONG SrvConsoleSubst(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
|
|
typedef struct tagFACENODE {
|
|
struct tagFACENODE *pNext;
|
|
DWORD dwFlag;
|
|
WCHAR awch[];
|
|
} FACENODE, *PFACENODE;
|
|
|
|
BOOL DoFontEnum(IN HDC hDC OPTIONAL, IN LPWSTR pwszFace OPTIONAL, IN SHORT TTPointSize);
|
|
|
|
#if defined(FE_SB)
|
|
VOID SetConsoleCPInfo(IN PCONSOLE_INFORMATION Console, IN BOOL Output);
|
|
BOOL CheckBisectStringW(IN PSCREEN_INFORMATION ScreenInfo, IN DWORD CodePage, IN PWCHAR Buffer, IN DWORD NumWords, IN DWORD NumBytes);
|
|
BOOL CheckBisectProcessW(
|
|
IN PSCREEN_INFORMATION ScreenInfo,
|
|
IN DWORD CodePage,
|
|
IN PWCHAR Buffer,
|
|
IN DWORD NumWords,
|
|
IN DWORD NumBytes,
|
|
IN SHORT OriginalXPosition,
|
|
IN BOOL Echo
|
|
);
|
|
#endif // FE_SB
|
|
|
|
// directio.c
|
|
|
|
ULONG SrvGetConsoleInput(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvWriteConsoleInput(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvReadConsoleOutput(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvWriteConsoleOutput(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvReadConsoleOutputString(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvWriteConsoleOutputString(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvFillConsoleOutput(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvCreateConsoleScreenBuffer(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
NTSTATUS TranslateOutputToPaddingUnicode(IN PCONSOLE_INFORMATION Console, IN OUT PCHAR_INFO OutputBuffer, IN COORD Size, IN OUT PCHAR_INFO OutputBufferR);
|
|
|
|
// getset.c
|
|
|
|
ULONG SrvGetConsoleMode(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleNumberOfFonts(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleNumberOfInputEvents(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetLargestConsoleWindowSize(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleScreenBufferInfo(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleCursorInfo(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleMouseInfo(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleFontInfo(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleFontSize(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleCurrentFont(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleMode(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGenerateConsoleCtrlEvent(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleActiveScreenBuffer(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvFlushConsoleInputBuffer(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleScreenBufferSize(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleCursorPosition(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleCursorInfo(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleWindowInfo(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvScrollConsoleScreenBuffer(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleTextAttribute(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleFont(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleIcon(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
NTSTATUS SetScreenColors(IN PSCREEN_INFORMATION ScreenInfo, IN WORD Attributes, IN WORD PopupAttributes, IN BOOL UpdateWholeScreen);
|
|
ULONG SrvSetConsoleCP(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleCP(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleKeyboardLayoutName(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleWindow(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
|
|
// stream.c
|
|
|
|
NTSTATUS CookedRead(IN PCOOKED_READ_DATA CookedReadData, IN PCSR_API_MSG WaitReplyMessage, IN PCSR_THREAD WaitingThread, IN BOOLEAN WaitRoutine);
|
|
NTSTATUS ReadChars(
|
|
IN PINPUT_INFORMATION InputInfo,
|
|
IN PCONSOLE_INFORMATION Console,
|
|
IN PCONSOLE_PER_PROCESS_DATA ProcessData,
|
|
IN PSCREEN_INFORMATION ScreenInfo,
|
|
IN OUT PWCHAR lpBuffer,
|
|
IN OUT PDWORD NumBytes,
|
|
IN DWORD InitialNumBytes,
|
|
IN DWORD CtrlWakeupMask,
|
|
IN PHANDLE_DATA HandleData,
|
|
IN PCOMMAND_HISTORY CommandHistory,
|
|
IN PCSR_API_MSG Message OPTIONAL,
|
|
IN HANDLE HandleIndex,
|
|
IN USHORT ExeNameLength,
|
|
IN PWCHAR ExeName,
|
|
IN BOOLEAN Unicode
|
|
);
|
|
ULONG SrvOpenConsole(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvReadConsole(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvWriteConsole(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvDuplicateHandle(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetHandleInformation(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetHandleInformation(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
VOID UnblockWriteConsole(IN PCONSOLE_INFORMATION Console, IN DWORD Reason);
|
|
NTSTATUS CloseInputHandle(IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN PCONSOLE_INFORMATION Console, IN PHANDLE_DATA HandleData, IN HANDLE Handle);
|
|
NTSTATUS CloseOutputHandle(IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN PCONSOLE_INFORMATION Console, IN PHANDLE_DATA HandleData, IN HANDLE Handle, IN BOOLEAN FreeHandle);
|
|
ULONG SrvCloseHandle(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
VOID MakeCursorVisible(IN PSCREEN_INFORMATION ScreenInfo, IN COORD CursorPosition);
|
|
|
|
#if defined(FE_SB)
|
|
HANDLE FindActiveScreenBufferHandle(IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN PCONSOLE_INFORMATION Console);
|
|
NTSTATUS WriteString(IN PSCREEN_INFORMATION ScreenInfo, IN PWCHAR String, IN ULONG NumChars, IN BOOL KeepCursorVisible, OUT PSHORT ScrollY OPTIONAL);
|
|
#endif
|
|
|
|
// cursor.c
|
|
|
|
NTSTATUS SetCursorInformation(PSCREEN_INFORMATION ScreenInfo, ULONG Size, BOOLEAN Visible);
|
|
NTSTATUS SetCursorPosition(IN OUT PSCREEN_INFORMATION ScreenInfo, IN COORD Position, IN BOOL TurnOn);
|
|
NTSTATUS SetCursorMode(PSCREEN_INFORMATION ScreenInfo, BOOLEAN DoubleCursor);
|
|
VOID CursorTimerRoutine(IN PSCREEN_INFORMATION ScreenInfo);
|
|
#if defined(FE_SB)
|
|
VOID SB_InvertPixels(IN PSCREEN_INFORMATION ScreenInfo);
|
|
#endif
|
|
VOID ConsoleHideCursor(IN PSCREEN_INFORMATION ScreenInfo);
|
|
VOID ConsoleShowCursor(IN PSCREEN_INFORMATION ScreenInfo);
|
|
#ifdef i386
|
|
NTSTATUS SetCursorInformationHW(PSCREEN_INFORMATION ScreenInfo, ULONG Size, BOOLEAN Visible);
|
|
NTSTATUS SetCursorPositionHW(IN OUT PSCREEN_INFORMATION ScreenInfo, IN COORD Position);
|
|
#endif
|
|
|
|
// cmdline.c
|
|
|
|
VOID InitializeConsoleCommandData(IN PCONSOLE_INFORMATION Console);
|
|
ULONG SrvAddConsoleAlias(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleAlias(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
DWORD SrvGetConsoleAliasesLength(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
DWORD SrvGetConsoleAliasExesLength(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
DWORD SrvGetConsoleAliases(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
DWORD SrvGetConsoleAliasExes(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
DWORD SrvExpungeConsoleCommandHistory(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
DWORD SrvSetConsoleNumberOfCommands(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
DWORD SrvGetConsoleCommandHistoryLength(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
DWORD SrvGetConsoleCommandHistory(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
DWORD SrvSetConsoleCommandHistoryMode(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
NTSTATUS MatchandCopyAlias(
|
|
IN PCONSOLE_INFORMATION Console,
|
|
IN PWCHAR Source,
|
|
IN USHORT SourceLength,
|
|
OUT PWCHAR TargetBuffer,
|
|
IN OUT PUSHORT TargetLength,
|
|
IN LPWSTR Exe,
|
|
IN USHORT ExeLength,
|
|
OUT PDWORD LineCount
|
|
);
|
|
NTSTATUS AddCommand(IN PCOMMAND_HISTORY CommandHistory, IN PWCHAR Command, IN USHORT Length, IN BOOL HistoryNoDup);
|
|
NTSTATUS RetrieveCommand(IN PCOMMAND_HISTORY CommandHistory, IN WORD VirtualKeyCode, IN PWCHAR Buffer, IN ULONG BufferSize, OUT PULONG CommandSize);
|
|
PCOMMAND_HISTORY AllocateCommandHistory(IN PCONSOLE_INFORMATION Console, IN DWORD AppNameLength, IN PWCHAR AppName, IN HANDLE ProcessHandle);
|
|
VOID ResetCommandHistory(IN PCOMMAND_HISTORY CommandHistory);
|
|
ULONG SrvGetConsoleTitle(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleTitle(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
VOID FreeAliasBuffers(IN PCONSOLE_INFORMATION Console);
|
|
VOID FreeCommandHistory(IN PCONSOLE_INFORMATION Console, IN HANDLE ProcessHandle);
|
|
VOID FreeCommandHistoryBuffers(IN OUT PCONSOLE_INFORMATION Console);
|
|
VOID ResizeCommandHistoryBuffers(IN PCONSOLE_INFORMATION Console, IN UINT NumCommands);
|
|
int MyStringCompareW(IN LPWSTR Str1, IN LPWSTR Str2, IN USHORT Length, IN BOOLEAN bCaseInsensitive);
|
|
int LoadStringExW(IN HINSTANCE hModule, IN UINT wID, OUT LPWSTR lpBuffer, IN int cchBufferMax, IN WORD wLangId);
|
|
|
|
// srvinit.c
|
|
|
|
ULONG SrvAllocConsole(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvFreeConsole(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
NTSTATUS RemoveConsole(IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN HANDLE ProcessHandle, IN HANDLE ProcessId);
|
|
BOOL MapHandle(IN HANDLE ClientProcessHandle, IN HANDLE ServerHandle, OUT PHANDLE ClientHandle);
|
|
VOID InitializeConsoleAttributes( VOID );
|
|
VOID GetRegistryValues(IN LPWSTR ConsoleTitle, OUT PCONSOLE_REGISTRY_INFO RegInfo);
|
|
|
|
#if defined(FE_SB)
|
|
NTSTATUS MyRegOpenKey(IN HANDLE hKey, IN LPWSTR lpSubKey, OUT PHANDLE phResult);
|
|
NTSTATUS MyRegQueryValue(IN HANDLE hKey, IN LPWSTR lpValueName, IN DWORD dwValueLength, OUT LPBYTE lpData);
|
|
NTSTATUS MyRegQueryValueEx(IN HANDLE hKey, IN LPWSTR lpValueName, IN DWORD dwValueLength, OUT LPBYTE lpData, OUT LPDWORD lpDataLength);
|
|
NTSTATUS MyRegEnumValue(IN HANDLE hKey, IN DWORD dwIndex, OUT DWORD dwValueLength, OUT LPWSTR lpValueName, OUT DWORD dwDataLength, OUT LPBYTE lpData);
|
|
#endif
|
|
|
|
LPWSTR TranslateConsoleTitle(LPWSTR ConsoleTitle, PUSHORT pcbTranslatedLength, BOOL Unexpand, BOOL Substitute);
|
|
NTSTATUS GetConsoleLangId(IN UINT OutputCP, OUT LANGID* pLangId);
|
|
ULONG SrvGetConsoleLangId(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
|
|
// bitmap.c
|
|
|
|
NTSTATUS CreateConsoleBitmap(IN OUT PCONSOLE_GRAPHICS_BUFFER_INFO GraphicsInfo, IN OUT PSCREEN_INFORMATION ScreenInfo, OUT PVOID *lpBitmap, OUT HANDLE *hMutex);
|
|
NTSTATUS WriteRegionToScreenBitMap(IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT Region);
|
|
ULONG SrvInvalidateBitMapRect(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvVDMConsoleOperation(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
|
|
|
|
// private.c
|
|
|
|
VOID UpdateMousePosition(PSCREEN_INFORMATION ScreenInfo, COORD Position);
|
|
ULONG SrvSetConsoleCursor(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvShowConsoleCursor(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvConsoleMenuControl(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsolePalette(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleDisplayMode(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
VOID SetActivePalette(IN PSCREEN_INFORMATION ScreenInfo);
|
|
VOID UnsetActivePalette(IN PSCREEN_INFORMATION ScreenInfo);
|
|
ULONG SrvRegisterConsoleVDM(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
NTSTATUS SrvConsoleNotifyLastClose(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleHardwareState(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleHardwareState(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleDisplayMode(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleMenuClose(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleKeyShortcuts(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
|
|
#ifdef i386
|
|
VOID ReadRegionFromScreenHW(IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT Region, IN PCHAR_INFO ReadBufPtr);
|
|
VOID ScrollHW(IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT ScrollRect, IN PSMALL_RECT MergeRect, IN COORD TargetPoint);
|
|
ULONG MatchWindowSize(
|
|
#if defined(FE_SB)
|
|
IN UINT CodePage,
|
|
#endif
|
|
IN COORD WindowSize,
|
|
OUT PCOORD pWindowSize
|
|
);
|
|
BOOL SetVideoMode(IN PSCREEN_INFORMATION ScreenInfo);
|
|
NTSTATUS DisplayModeTransition(IN BOOL Foreground, IN PCONSOLE_INFORMATION Console, IN PSCREEN_INFORMATION ScreenInfo);
|
|
NTSTATUS ConvertToWindowed(IN PCONSOLE_INFORMATION Console);
|
|
NTSTATUS ConvertToFullScreen(IN PCONSOLE_INFORMATION Console);
|
|
NTSTATUS SetROMFontCodePage(IN UINT wCodePage, IN ULONG ModeIndex);
|
|
#endif
|
|
|
|
BOOL InitializeFullScreen( VOID );
|
|
NTSTATUS ChangeDispSettings(PCONSOLE_INFORMATION Console, HWND hwnd, DWORD dwFlags);
|
|
|
|
#define SCREEN_BUFFER_POINTER(X,Y,XSIZE,CELLSIZE) (((XSIZE * (Y)) + (X)) * (ULONG)CELLSIZE)
|
|
|
|
// menu.c
|
|
|
|
VOID InitSystemMenu(IN PCONSOLE_INFORMATION Console);
|
|
VOID InitializeMenu(IN PCONSOLE_INFORMATION Console);
|
|
VOID SetWinText(IN PCONSOLE_INFORMATION Console, IN UINT wID, IN BOOL Add);
|
|
VOID PropertiesDlgShow(IN PCONSOLE_INFORMATION Console, IN BOOL fCurrent);
|
|
VOID PropertiesUpdate(IN PCONSOLE_INFORMATION Console, IN HANDLE hClientSection);
|
|
|
|
// fontdlg.c
|
|
|
|
int FindCreateFont(DWORD Family, LPWSTR pwszTTFace, COORD Size, LONG Weight, UINT CodePage);
|
|
|
|
// clipbrd.c
|
|
|
|
VOID DoCopy(IN PCONSOLE_INFORMATION Console);
|
|
VOID DoMark(IN PCONSOLE_INFORMATION Console);
|
|
VOID DoSelectAll(IN PCONSOLE_INFORMATION Console);
|
|
VOID DoStringPaste(IN PCONSOLE_INFORMATION Console, IN PWCHAR pwStr, IN UINT DataSize);
|
|
VOID DoPaste(IN PCONSOLE_INFORMATION Console);
|
|
|
|
#if defined(FE_SB)
|
|
VOID SB_ExtendSelection(IN PCONSOLE_INFORMATION Console, IN COORD CursorPosition);
|
|
#else
|
|
VOID ExtendSelection(IN PCONSOLE_INFORMATION Console, IN COORD CursorPosition);
|
|
#endif
|
|
|
|
VOID ClearSelection(IN PCONSOLE_INFORMATION Console);
|
|
VOID StoreSelection(IN PCONSOLE_INFORMATION Console);
|
|
VOID InvertSelection(IN PCONSOLE_INFORMATION Console, BOOL Inverting);
|
|
#if defined(FE_SB)
|
|
BOOL SB_MyInvert(IN PCONSOLE_INFORMATION Console, IN PSMALL_RECT SmallRect);
|
|
#else
|
|
BOOL MyInvert(IN PCONSOLE_INFORMATION Console, IN PSMALL_RECT SmallRect);
|
|
#endif
|
|
|
|
VOID ConvertToMouseSelect(IN PCONSOLE_INFORMATION Console, IN COORD MousePosition);
|
|
VOID DoScroll(IN PCONSOLE_INFORMATION Console);
|
|
VOID ClearScroll(IN PCONSOLE_INFORMATION Console);
|
|
|
|
// External private functions used by consrv
|
|
|
|
BOOL SetConsoleReserveKeys(HWND hWnd, DWORD fsReserveKeys);
|
|
int APIENTRY GreGetDIBitsInternal(HDC hdc, HBITMAP hBitmap, UINT iStartScan, UINT cNumScan, LPBYTE pjBits, LPBITMAPINFO pBitsInfo, UINT iUsage, UINT cjMaxBits, UINT cjMaxInfo);
|
|
|
|
#if defined(FE_SB)
|
|
// constubs.c
|
|
ULONG SrvGetConsoleCharType(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleLocalEUDC(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleCursorMode(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvGetConsoleCursorMode(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvRegisterConsoleOS2(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleOS2OemFormat(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
#if defined(FE_IME)
|
|
ULONG SrvGetConsoleNlsMode(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvSetConsoleNlsMode(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvRegisterConsoleIME(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
ULONG SrvUnregisterConsoleIME(IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus);
|
|
#endif // FE_IME
|
|
|
|
// dispatch.c
|
|
VOID InvertPixels(IN PSCREEN_INFORMATION ScreenInfo);
|
|
WCHAR CharToWchar(IN PCONSOLE_INFORMATION Console, IN UINT Codepage, IN char *Ch);
|
|
BOOL MyInvert(IN PCONSOLE_INFORMATION Console, IN PSMALL_RECT SmallRect);
|
|
VOID ExtendSelection(IN PCONSOLE_INFORMATION Console, IN COORD CursorPosition);
|
|
|
|
#endif // FE_SB
|
|
|
|
/*
|
|
* The following define must match the define in w32\w32inc\w32p.h.
|
|
* Later5.0 GerardoB: It should include w32p.h although that implies including several other headers.
|
|
*/
|
|
#define W32PF_ALLOWSETFOREGROUND 0x00080000
|
|
#define W32PF_CONSOLEHASFOCUS 0x04000000 |