[SDK] Improve wincon.h and add wincon_undoc.h (#8019)

- Add missing WINBASEAPI modifiers.
- Update/add missing SAL annotations.
- Add missing function argument names.
- Only keep public definitions there.
- Move private/undocumented ones in a new wincon_undoc.h

This header is based on the following resources:
- https://undoc.airesoft.co.uk/kernel32.dll/
- https://github.com/microsoft/terminal/blob/main/dep/Console/ntcon.h
- https://github.com/microsoft/terminal/blob/main/dep/Console/winconp.h
  (commit f08321a0b2)
This commit is contained in:
Hermès Bélusca-Maïto 2025-05-13 14:26:37 +02:00
parent 228156e79f
commit 412fe7d9ac
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
3 changed files with 1068 additions and 199 deletions

View file

@ -167,6 +167,8 @@
/drivers/base/condrv/ @HBelusca
/drivers/setup/blue/ @HBelusca
/modules/rostests/winetests/kernel32/console.c @HBelusca
/sdk/include/psdk/wincon.h @HBelusca
/sdk/include/reactos/wincon_undoc.h @HBelusca
/sdk/include/reactos/drivers/condrv/ @HBelusca
/sdk/include/reactos/drivers/blue/ @HBelusca
/sdk/include/reactos/subsys/win/conmsg.h @HBelusca

View file

@ -1,12 +1,34 @@
#ifndef _WINCON_H
#define _WINCON_H
/*
* wincon.h
*
* Console API definitions
*
* This file is part of the ReactOS PSDK package.
*
* Contributors:
* Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef _WINCON_
#define _WINCON_
#ifdef __cplusplus
extern "C" {
#endif
#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) && !defined(NOGDI)
# include "wingdi.h"
#include "wingdi.h"
#endif
#ifdef _MSC_VER
@ -17,19 +39,25 @@ extern "C" {
/*
* Special PID for parent process for AttachConsole API
*/
#if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
#define ATTACH_PARENT_PROCESS ((DWORD)-1)
#endif
/* Special console handle values */
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
#define CONSOLE_REAL_OUTPUT_HANDLE (LongToHandle(-2))
#define CONSOLE_REAL_INPUT_HANDLE (LongToHandle(-3))
#endif
/*
* Console display modes
*/
// These codes are answered by GetConsoleDisplayMode
// These flags are returned by GetConsoleDisplayMode
#define CONSOLE_WINDOWED 0
#define CONSOLE_FULLSCREEN 1
#define CONSOLE_FULLSCREEN_HARDWARE 2
#define CONSOLE_FULLSCREEN 1 /* Fullscreen console */
#define CONSOLE_FULLSCREEN_HARDWARE 2 /* Console owns the hardware */
// These codes should be given to SetConsoleDisplayMode
// These flags are given to SetConsoleDisplayMode
#define CONSOLE_FULLSCREEN_MODE 1
#define CONSOLE_WINDOWED_MODE 2
@ -59,18 +87,19 @@ extern "C" {
/*
* Screen buffer types
*/
#define CONSOLE_TEXTMODE_BUFFER 1
#define CONSOLE_GRAPHICS_BUFFER 2 /* Undocumented, see http://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/ */
#define CONSOLE_TEXTMODE_BUFFER 1
// 2 is reserved!
/*
* Control handler codes
*/
#define CTRL_C_EVENT 0
#define CTRL_BREAK_EVENT 1
#define CTRL_CLOSE_EVENT 2
#define CTRL_LAST_CLOSE_EVENT 3 /* Undocumented */
#define CTRL_LOGOFF_EVENT 5
#define CTRL_SHUTDOWN_EVENT 6
#define CTRL_C_EVENT 0
#define CTRL_BREAK_EVENT 1
#define CTRL_CLOSE_EVENT 2
// 3 is reserved!
// 4 is reserved!
#define CTRL_LOGOFF_EVENT 5
#define CTRL_SHUTDOWN_EVENT 6
/*
* Input mode flags
@ -86,24 +115,29 @@ extern "C" {
#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
#define ENABLE_AUTO_POSITION 0x0100
#endif
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN10)
#if (NTDDI_VERSION >= NTDDI_WIN10_RS1) // (_WIN32_WINNT >= _WIN32_WINNT_WIN10)
#define ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200
#endif
/*
* Output mode flags
*/
#define ENABLE_PROCESSED_OUTPUT 0x0001
#define ENABLE_WRAP_AT_EOL_OUTPUT 0x0002
#define ENABLE_PROCESSED_OUTPUT 0x0001
#define ENABLE_WRAP_AT_EOL_OUTPUT 0x0002
#if (NTDDI_VERSION >= NTDDI_WIN10_RS1) // (_WIN32_WINNT >= _WIN32_WINNT_WIN10)
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#define DISABLE_NEWLINE_AUTO_RETURN 0x0008
#define ENABLE_LVB_GRID_WORLDWIDE 0x0010
#endif
/*
* Console selection flags
*/
#define CONSOLE_NO_SELECTION 0x0000
#define CONSOLE_SELECTION_IN_PROGRESS 0x0001
#define CONSOLE_SELECTION_NOT_EMPTY 0x0002
#define CONSOLE_MOUSE_SELECTION 0x0004
#define CONSOLE_MOUSE_DOWN 0x0008
#define CONSOLE_SELECTION_IN_PROGRESS 0x0001 /* Selection has begun */
#define CONSOLE_SELECTION_NOT_EMPTY 0x0002 /* Non-null select rectangle */
#define CONSOLE_MOUSE_SELECTION 0x0004 /* Selecting with mouse */
#define CONSOLE_MOUSE_DOWN 0x0008 /* Mouse is down */
/*
* History information and mode flags
@ -116,12 +150,6 @@ extern "C" {
#endif
/*
* Read input flags
*/
#define CONSOLE_READ_NOREMOVE 0x0001
#define CONSOLE_READ_NOWAIT 0x0002
/*
* Event types
*/
@ -151,6 +179,8 @@ extern "C" {
#define NLS_HIRAGANA 0x00040000 /* Hiragana mode */
#define NLS_ROMAN 0x00400000 /* Roman/Noroman mode */
#define NLS_IME_CONVERSION 0x00800000 /* IME conversion */
/* Reserved for EXTENDED_BIT, DONTCARE_BIT, FAKE_KEYSTROKE, ALTNUMPAD_BIT (kbd.h) */
#define ALTNUMPAD_BIT 0x04000000 /* AltNumpad OEM char */
#define NLS_IME_DISABLE 0x20000000 /* IME enable/disable */
/*
@ -223,18 +253,9 @@ typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
COORD dwMaximumWindowSize;
} CONSOLE_SCREEN_BUFFER_INFO,*PCONSOLE_SCREEN_BUFFER_INFO;
/* Undocumented, see http://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/ */
#if defined(_WINGDI_) && !defined(NOGDI)
typedef struct _CONSOLE_GRAPHICS_BUFFER_INFO {
DWORD dwBitMapInfoLength;
LPBITMAPINFO lpBitMapInfo;
DWORD dwUsage; // DIB_PAL_COLORS or DIB_RGB_COLORS
HANDLE hMutex;
PVOID lpBitMap;
} CONSOLE_GRAPHICS_BUFFER_INFO, *PCONSOLE_GRAPHICS_BUFFER_INFO;
#endif
typedef BOOL(CALLBACK *PHANDLER_ROUTINE)(_In_ DWORD);
typedef BOOL
(WINAPI *PHANDLER_ROUTINE)(
_In_ DWORD CtrlType);
typedef struct _KEY_EVENT_RECORD {
BOOL bKeyDown;
@ -310,148 +331,320 @@ typedef struct _CONSOLE_FONT_INFOEX {
WCHAR FaceName[LF_FACESIZE];
} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
#endif
#endif // (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
WINBASEAPI
BOOL
WINAPI
AllocConsole(VOID);
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
WINBASEAPI
BOOL
WINAPI
AttachConsole(
_In_ DWORD dwProcessId);
#endif
BOOL WINAPI AllocConsole(VOID);
#if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
BOOL WINAPI AttachConsole(_In_ DWORD);
BOOL WINAPI AddConsoleAliasA(_In_ LPCSTR, _In_ LPCSTR, _In_ LPCSTR);
BOOL WINAPI AddConsoleAliasW(_In_ LPCWSTR, _In_ LPCWSTR, _In_ LPCWSTR);
WINBASEAPI
DWORD
WINAPI
GetConsoleProcessList(
_Out_writes_(dwProcessCount) LPDWORD lpdwProcessList,
_In_ DWORD dwProcessCount);
WINBASEAPI
BOOL
WINAPI
AddConsoleAliasA(
_In_ LPCSTR Source,
_In_ LPCSTR Target,
_In_ LPCSTR ExeName);
WINBASEAPI
BOOL
WINAPI
AddConsoleAliasW(
_In_ LPCWSTR Source,
_In_ LPCWSTR Target,
_In_ LPCWSTR ExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleAliasA(
_In_ LPSTR Source,
_In_ LPCSTR Source,
_Out_writes_(TargetBufferLength) LPSTR TargetBuffer,
_In_ DWORD TargetBufferLength,
_In_ LPSTR ExeName);
_In_ LPCSTR ExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleAliasW(
_In_ LPWSTR Source,
_In_ LPCWSTR Source,
_Out_writes_(TargetBufferLength) LPWSTR TargetBuffer,
_In_ DWORD TargetBufferLength,
_In_ LPWSTR ExeName);
_In_ LPCWSTR ExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleAliasesA(
_Out_writes_(AliasBufferLength) LPSTR AliasBuffer,
_In_ DWORD AliasBufferLength,
_In_ LPSTR ExeName);
_In_ LPCSTR ExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleAliasesW(
_Out_writes_(AliasBufferLength) LPWSTR AliasBuffer,
_In_ DWORD AliasBufferLength,
_In_ LPWSTR ExeName);
_In_ LPCWSTR ExeName);
DWORD WINAPI GetConsoleAliasesLengthA(_In_ LPSTR ExeName);
DWORD WINAPI GetConsoleAliasesLengthW(_In_ LPWSTR ExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleAliasesLengthA(
_In_ LPCSTR ExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleAliasesLengthW(
_In_ LPCWSTR ExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleAliasExesA(
_Out_writes_(ExeNameBufferLength) LPSTR ExeNameBuffer,
_In_ DWORD ExeNameBufferLength);
WINBASEAPI
DWORD
WINAPI
GetConsoleAliasExesW(
_Out_writes_(ExeNameBufferLength) LPWSTR ExeNameBuffer,
_In_ DWORD ExeNameBufferLength);
DWORD WINAPI GetConsoleAliasExesLengthA(VOID);
DWORD WINAPI GetConsoleAliasExesLengthW(VOID);
#endif
WINBASEAPI
DWORD
WINAPI
GetConsoleAliasExesLengthA(VOID);
WINBASEAPI
DWORD
WINAPI
GetConsoleAliasExesLengthW(VOID);
#endif // (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
WINBASEAPI
HANDLE
WINAPI
CreateConsoleScreenBuffer(
_In_ DWORD,
_In_ DWORD,
_In_opt_ CONST SECURITY_ATTRIBUTES*,
_In_ DWORD,
_Reserved_ LPVOID);
_In_ DWORD dwDesiredAccess,
_In_ DWORD dwShareMode,
_In_opt_ CONST SECURITY_ATTRIBUTES *lpSecurityAttributes,
_In_ DWORD dwFlags,
_Reserved_ LPVOID lpScreenBufferData);
WINBASEAPI
BOOL
WINAPI
FillConsoleOutputAttribute(
_In_ HANDLE,
_In_ WORD,
_In_ DWORD,
_In_ COORD,
_Out_ PDWORD);
_In_ HANDLE hConsoleOutput,
_In_ WORD wAttribute,
_In_ DWORD nLength,
_In_ COORD dwWriteCoord,
_Out_ LPDWORD lpNumberOfAttrsWritten);
WINBASEAPI
BOOL
WINAPI
FillConsoleOutputCharacterA(
_In_ HANDLE,
_In_ CHAR,
_In_ DWORD,
_In_ COORD,
_Out_ PDWORD);
_In_ HANDLE hConsoleOutput,
_In_ CHAR cCharacter,
_In_ DWORD nLength,
_In_ COORD dwWriteCoord,
_Out_ LPDWORD lpNumberOfCharsWritten);
WINBASEAPI
BOOL
WINAPI
FillConsoleOutputCharacterW(
_In_ HANDLE,
_In_ WCHAR,
_In_ DWORD,
_In_ COORD,
_Out_ PDWORD);
_In_ HANDLE hConsoleOutput,
_In_ WCHAR cCharacter,
_In_ DWORD nLength,
_In_ COORD dwWriteCoord,
_Out_ LPDWORD lpNumberOfCharsWritten);
BOOL WINAPI FlushConsoleInputBuffer(_In_ HANDLE);
BOOL WINAPI FreeConsole(VOID);
BOOL WINAPI GenerateConsoleCtrlEvent(_In_ DWORD, _In_ DWORD);
UINT WINAPI GetConsoleCP(VOID);
BOOL WINAPI GetConsoleCursorInfo(_In_ HANDLE, _Out_ PCONSOLE_CURSOR_INFO);
BOOL WINAPI GetConsoleMode(_In_ HANDLE, _Out_ PDWORD);
UINT WINAPI GetConsoleOutputCP(VOID);
WINBASEAPI
BOOL
WINAPI
FlushConsoleInputBuffer(
_In_ HANDLE hConsoleInput);
WINBASEAPI
BOOL
WINAPI
FreeConsole(VOID);
WINBASEAPI
BOOL
WINAPI
GenerateConsoleCtrlEvent(
_In_ DWORD dwCtrlEvent,
_In_ DWORD dwProcessGroupId);
WINBASEAPI
UINT
WINAPI
GetConsoleCP(VOID);
WINBASEAPI
BOOL
WINAPI
GetConsoleCursorInfo(
_In_ HANDLE hConsoleOutput,
_Out_ PCONSOLE_CURSOR_INFO lpConsoleCursorInfo);
WINBASEAPI
BOOL
WINAPI
GetConsoleMode(
_In_ HANDLE hConsoleHandle,
_Out_ LPDWORD lpMode);
WINBASEAPI
UINT
WINAPI
GetConsoleOutputCP(VOID);
WINBASEAPI
BOOL
WINAPI
GetConsoleScreenBufferInfo(
_In_ HANDLE,
_Out_ PCONSOLE_SCREEN_BUFFER_INFO);
_In_ HANDLE hConsoleOutput,
_Out_ PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo);
/* Undocumented, see http://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/ */
BOOL WINAPI InvalidateConsoleDIBits(_In_ HANDLE, _In_ PSMALL_RECT);
#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
WINBASEAPI
BOOL
WINAPI
GetConsoleScreenBufferInfoEx(
_In_ HANDLE hConsoleOutput,
_Inout_ PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx);
WINBASEAPI
BOOL
WINAPI
SetConsoleScreenBufferInfoEx(
_In_ HANDLE hConsoleOutput,
_In_ PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx);
#endif // (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
WINBASEAPI
DWORD
WINAPI
GetConsoleTitleA(
_Out_writes_(nSize) LPSTR lpConsoleTitle,
_In_ DWORD nSize);
WINBASEAPI
DWORD
WINAPI
GetConsoleTitleW(
_Out_writes_(nSize) LPWSTR lpConsoleTitle,
_In_ DWORD nSize);
#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
WINBASEAPI
DWORD
WINAPI
GetConsoleOriginalTitleA(
_Out_writes_(nSize) LPSTR lpConsoleTitle,
_In_ DWORD nSize);
WINBASEAPI
DWORD
WINAPI
GetConsoleOriginalTitleW(
_Out_writes_(nSize) LPWSTR lpConsoleTitle,
_In_ DWORD nSize);
#ifndef NOGDI
WINBASEAPI
BOOL
WINAPI
GetCurrentConsoleFontEx(
_In_ HANDLE hConsoleOutput,
_In_ BOOL bMaximumWindow,
_Out_ PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx);
WINBASEAPI
BOOL
WINAPI
SetCurrentConsoleFontEx(
_In_ HANDLE hConsoleOutput,
_In_ BOOL bMaximumWindow,
_In_ PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx);
#endif
WINBASEAPI
BOOL
WINAPI
GetConsoleHistoryInfo(
_Out_ PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo);
WINBASEAPI
BOOL
WINAPI
SetConsoleHistoryInfo(
_In_ PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo);
#endif // (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
WINBASEAPI
BOOL
WINAPI
GetCurrentConsoleFont(
_In_ HANDLE hConsoleOutput,
_In_ BOOL bMaximumWindow,
_Out_ PCONSOLE_FONT_INFO lpConsoleCurrentFont);
WINBASEAPI
COORD
WINAPI
GetConsoleFontSize(
_In_ HANDLE hConsoleOutput,
_In_ DWORD nFont);
WINBASEAPI
BOOL
WINAPI
GetCurrentConsoleFont(
_In_ HANDLE hConsoleOutput,
_In_ BOOL bMaximumWindow,
_Out_ PCONSOLE_FONT_INFO lpConsoleCurrentFont);
GetConsoleSelectionInfo(
_Out_ PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo);
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
WINBASEAPI
HWND
WINAPI
GetConsoleWindow(VOID);
HWND WINAPI GetConsoleWindow(VOID);
BOOL WINAPI GetConsoleDisplayMode(_Out_ LPDWORD lpModeFlags);
WINBASEAPI
BOOL
WINAPI
GetConsoleDisplayMode(
_Out_ LPDWORD lpModeFlags);
WINBASEAPI
BOOL
WINAPI
SetConsoleDisplayMode(
@ -459,13 +652,29 @@ SetConsoleDisplayMode(
_In_ DWORD dwFlags,
_Out_opt_ PCOORD lpNewScreenBufferDimensions);
#endif
#endif // (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
COORD WINAPI GetLargestConsoleWindowSize(_In_ HANDLE);
BOOL WINAPI GetNumberOfConsoleInputEvents(_In_ HANDLE, _Out_ PDWORD);
BOOL WINAPI GetNumberOfConsoleMouseButtons(_Out_ PDWORD);
WINBASEAPI
COORD
WINAPI
GetLargestConsoleWindowSize(
_In_ HANDLE hConsoleOutput);
_Success_(return != 0)
WINBASEAPI
BOOL
WINAPI
GetNumberOfConsoleInputEvents(
_In_ HANDLE hConsoleInput,
_Out_ LPDWORD lpNumberOfEvents);
WINBASEAPI
BOOL
WINAPI
GetNumberOfConsoleMouseButtons(
_Out_ LPDWORD lpNumberOfMouseButtons);
WINBASEAPI
_Success_(return != FALSE)
BOOL
WINAPI PeekConsoleInputA(
_In_ HANDLE hConsoleInput,
@ -473,7 +682,8 @@ WINAPI PeekConsoleInputA(
_In_ DWORD nLength,
_Out_ LPDWORD lpNumberOfEventsRead);
_Success_(return != 0)
WINBASEAPI
_Success_(return != FALSE)
BOOL
WINAPI
PeekConsoleInputW(
@ -482,64 +692,49 @@ PeekConsoleInputW(
_In_ DWORD nLength,
_Out_ LPDWORD lpNumberOfEventsRead);
_Success_(return != 0)
WINBASEAPI
_Success_(return != FALSE)
BOOL
WINAPI
ReadConsoleA(
_In_ HANDLE hConsoleInput,
_Out_writes_bytes_to_(nNumberOfCharsToRead * sizeof(CHAR), *lpNumberOfCharsRead * sizeof(CHAR)) LPVOID lpBuffer,
_In_ DWORD nNumberOfCharsToRead,
_Out_ _Deref_out_range_(<= , nNumberOfCharsToRead) LPDWORD lpNumberOfCharsRead,
_Out_ _Deref_out_range_(<=, nNumberOfCharsToRead) LPDWORD lpNumberOfCharsRead,
_In_opt_ PCONSOLE_READCONSOLE_CONTROL pInputControl);
_Success_(return != 0)
WINBASEAPI
_Success_(return != FALSE)
BOOL
WINAPI
ReadConsoleW(
_In_ HANDLE hConsoleInput,
_Out_writes_bytes_to_(nNumberOfCharsToRead * sizeof(WCHAR), *lpNumberOfCharsRead * sizeof(WCHAR)) LPVOID lpBuffer,
_In_ DWORD nNumberOfCharsToRead,
_Out_ _Deref_out_range_(<= , nNumberOfCharsToRead) LPDWORD lpNumberOfCharsRead,
_Out_ _Deref_out_range_(<=, nNumberOfCharsToRead) LPDWORD lpNumberOfCharsRead,
_In_opt_ PCONSOLE_READCONSOLE_CONTROL pInputControl);
_Success_(return != 0)
WINBASEAPI
_Success_(return != FALSE)
BOOL
WINAPI
ReadConsoleInputA(
_In_ HANDLE hConsoleInput,
_Out_writes_to_(nLength, *lpNumberOfEventsRead) PINPUT_RECORD lpBuffer,
_In_ DWORD nLength,
_Out_ _Deref_out_range_(<= , nLength) LPDWORD lpNumberOfEventsRead);
_Out_ _Deref_out_range_(<=, nLength) LPDWORD lpNumberOfEventsRead);
_Success_(return != 0)
WINBASEAPI
_Success_(return != FALSE)
BOOL
WINAPI
ReadConsoleInputW(
_In_ HANDLE hConsoleInput,
_Out_writes_to_(nLength, *lpNumberOfEventsRead) PINPUT_RECORD lpBuffer,
_In_ DWORD nLength,
_Out_ _Deref_out_range_(<= , nLength) LPDWORD lpNumberOfEventsRead);
_Success_(return != 0)
BOOL
WINAPI
ReadConsoleInputExA(
_In_ HANDLE hConsoleInput,
_Out_writes_to_(nLength, *lpNumberOfEventsRead) PINPUT_RECORD lpBuffer,
_In_ DWORD nLength,
_Out_ _Deref_out_range_(<= , nLength) LPDWORD lpNumberOfEventsRead,
_In_ WORD wFlags);
_Success_(return != 0)
BOOL
WINAPI
ReadConsoleInputExW(
_In_ HANDLE hConsoleInput,
_Out_writes_to_(nLength, *lpNumberOfEventsRead) PINPUT_RECORD lpBuffer,
_In_ DWORD nLength,
_Out_ _Deref_out_range_(<= , nLength) LPDWORD lpNumberOfEventsRead,
_In_ WORD wFlags);
_Out_ _Deref_out_range_(<=, nLength) LPDWORD lpNumberOfEventsRead);
WINBASEAPI
BOOL
WINAPI
ReadConsoleOutputAttribute(
@ -549,6 +744,7 @@ ReadConsoleOutputAttribute(
_In_ COORD dwReadCoord,
_Out_ LPDWORD lpNumberOfAttrsRead);
WINBASEAPI
BOOL
WINAPI
ReadConsoleOutputCharacterA(
@ -558,6 +754,7 @@ ReadConsoleOutputCharacterA(
_In_ COORD dwReadCoord,
_Out_ LPDWORD lpNumberOfCharsRead);
WINBASEAPI
BOOL
WINAPI
ReadConsoleOutputCharacterW(
@ -567,6 +764,7 @@ ReadConsoleOutputCharacterW(
_In_ COORD dwReadCoord,
_Out_ LPDWORD lpNumberOfCharsRead);
WINBASEAPI
BOOL
WINAPI
ReadConsoleOutputA(
@ -576,6 +774,7 @@ ReadConsoleOutputA(
_In_ COORD dwBufferCoord,
_Inout_ PSMALL_RECT lpReadRegion);
WINBASEAPI
BOOL
WINAPI
ReadConsoleOutputW(
@ -585,68 +784,107 @@ ReadConsoleOutputW(
_In_ COORD dwBufferCoord,
_Inout_ PSMALL_RECT lpReadRegion);
WINBASEAPI
BOOL
WINAPI
ScrollConsoleScreenBufferA(
_In_ HANDLE,
_In_ const SMALL_RECT*,
_In_opt_ const SMALL_RECT*,
_In_ COORD,
_In_ const CHAR_INFO*);
_In_ HANDLE hConsoleOutput,
_In_ CONST SMALL_RECT *lpScrollRectangle,
_In_opt_ CONST SMALL_RECT *lpClipRectangle,
_In_ COORD dwDestinationOrigin,
_In_ CONST CHAR_INFO *lpFill);
WINBASEAPI
BOOL
WINAPI
ScrollConsoleScreenBufferW(
_In_ HANDLE,
_In_ const SMALL_RECT*,
_In_opt_ const SMALL_RECT*,
_In_ COORD,
_In_ const CHAR_INFO*);
_In_ HANDLE hConsoleOutput,
_In_ CONST SMALL_RECT *lpScrollRectangle,
_In_opt_ CONST SMALL_RECT *lpClipRectangle,
_In_ COORD dwDestinationOrigin,
_In_ CONST CHAR_INFO *lpFill);
BOOL WINAPI SetConsoleActiveScreenBuffer(_In_ HANDLE);
BOOL WINAPI SetConsoleCP(_In_ UINT);
BOOL WINAPI SetConsoleCtrlHandler(_In_opt_ PHANDLER_ROUTINE, _In_ BOOL);
BOOL WINAPI SetConsoleCursorInfo(_In_ HANDLE, _In_ const CONSOLE_CURSOR_INFO*);
BOOL WINAPI SetConsoleCursorPosition(_In_ HANDLE, _In_ COORD);
BOOL WINAPI SetConsoleMode(_In_ HANDLE, _In_ DWORD);
BOOL WINAPI SetConsoleOutputCP(_In_ UINT);
BOOL WINAPI SetConsoleScreenBufferSize(_In_ HANDLE, _In_ COORD);
BOOL WINAPI SetConsoleTextAttribute(_In_ HANDLE, _In_ WORD);
BOOL WINAPI SetConsoleTitleA(_In_ LPCSTR);
BOOL WINAPI SetConsoleTitleW(_In_ LPCWSTR);
WINBASEAPI
BOOL
WINAPI
SetConsoleActiveScreenBuffer(
_In_ HANDLE hConsoleOutput);
WINBASEAPI
BOOL
WINAPI
SetConsoleCP(
_In_ UINT wCodePageID);
WINBASEAPI
BOOL
WINAPI
SetConsoleCtrlHandler(
_In_opt_ PHANDLER_ROUTINE HandlerRoutine,
_In_ BOOL Add);
WINBASEAPI
BOOL
WINAPI
SetConsoleCursorInfo(
_In_ HANDLE hConsoleOutput,
_In_ CONST CONSOLE_CURSOR_INFO *lpConsoleCursorInfo);
WINBASEAPI
BOOL
WINAPI
SetConsoleCursorPosition(
_In_ HANDLE hConsoleOutput,
_In_ COORD dwCursorPosition);
WINBASEAPI
BOOL
WINAPI
SetConsoleMode(
_In_ HANDLE hConsoleHandle,
_In_ DWORD dwMode);
WINBASEAPI
BOOL
WINAPI
SetConsoleOutputCP(
_In_ UINT wCodePageID);
WINBASEAPI
BOOL
WINAPI
SetConsoleScreenBufferSize(
_In_ HANDLE hConsoleOutput,
_In_ COORD dwSize);
WINBASEAPI
BOOL
WINAPI
SetConsoleTextAttribute(
_In_ HANDLE hConsoleOutput,
_In_ WORD wAttributes);
WINBASEAPI
BOOL
WINAPI
SetConsoleTitleA(
_In_ LPCSTR lpConsoleTitle);
WINBASEAPI
BOOL
WINAPI
SetConsoleTitleW(
_In_ LPCWSTR lpConsoleTitle);
WINBASEAPI
BOOL
WINAPI
SetConsoleWindowInfo(
_In_ HANDLE,
_In_ BOOL,
_In_ const SMALL_RECT*);
/* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/ConsoleMenuControl.php */
HMENU WINAPI ConsoleMenuControl(_In_ HANDLE, _In_ DWORD, _In_ DWORD);
/* Undocumented */
BOOL WINAPI SetConsoleMenuClose(_In_ BOOL);
/* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/SetConsoleCursor.php */
BOOL WINAPI SetConsoleCursor(_In_ HANDLE, _In_ HCURSOR);
/* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/ShowConsoleCursor.php */
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 */
BOOL WINAPI SetConsolePalette(_In_ HANDLE, _In_ HPALETTE, _In_ UINT);
/* Undocumented */
BOOL WINAPI CloseConsoleHandle(_In_ HANDLE);
/* Undocumented */
HANDLE WINAPI GetConsoleInputWaitHandle(VOID);
/* Undocumented */
BOOL WINAPI VerifyConsoleIoHandle(_In_ HANDLE);
/* Undocumented */
BOOL
WINAPI
RegisterConsoleVDM(_In_ DWORD, _In_ HANDLE, _In_ HANDLE, _In_ HANDLE, _In_ DWORD,
_Out_ LPDWORD, _Out_ PVOID*, _In_ PVOID, _In_ DWORD, _In_ COORD,
_Out_ PVOID*);
_In_ HANDLE hConsoleOutput,
_In_ BOOL bAbsolute,
_In_ CONST SMALL_RECT *lpConsoleWindow);
WINBASEAPI
BOOL
WINAPI
WriteConsoleA(
@ -656,6 +894,7 @@ WriteConsoleA(
_Out_opt_ LPDWORD lpNumberOfCharsWritten,
_Reserved_ LPVOID lpReserved);
WINBASEAPI
BOOL
WINAPI
WriteConsoleW(
@ -665,6 +904,7 @@ WriteConsoleW(
_Out_opt_ LPDWORD lpNumberOfCharsWritten,
_Reserved_ LPVOID lpReserved);
WINBASEAPI
BOOL
WINAPI
WriteConsoleInputA(
@ -673,6 +913,7 @@ WriteConsoleInputA(
_In_ DWORD nLength,
_Out_ LPDWORD lpNumberOfEventsWritten);
WINBASEAPI
BOOL
WINAPI
WriteConsoleInputW(
@ -681,22 +922,7 @@ WriteConsoleInputW(
_In_ DWORD nLength,
_Out_ LPDWORD lpNumberOfEventsWritten);
BOOL
WINAPI
WriteConsoleInputVDMA(
_In_ HANDLE hConsoleInput,
_In_reads_(nLength) CONST INPUT_RECORD *lpBuffer,
_In_ DWORD nLength,
_Out_ LPDWORD lpNumberOfEventsWritten);
BOOL
WINAPI
WriteConsoleInputVDMW(
_In_ HANDLE hConsoleInput,
_In_reads_(nLength) CONST INPUT_RECORD *lpBuffer,
_In_ DWORD nLength,
_Out_ LPDWORD lpNumberOfEventsWritten);
WINBASEAPI
BOOL
WINAPI
WriteConsoleOutputA(
@ -706,6 +932,7 @@ WriteConsoleOutputA(
_In_ COORD dwBufferCoord,
_Inout_ PSMALL_RECT lpWriteRegion);
WINBASEAPI
BOOL
WINAPI
WriteConsoleOutputW(
@ -715,6 +942,7 @@ WriteConsoleOutputW(
_In_ COORD dwBufferCoord,
_Inout_ PSMALL_RECT lpWriteRegion);
WINBASEAPI
BOOL
WINAPI
WriteConsoleOutputAttribute(
@ -724,6 +952,7 @@ WriteConsoleOutputAttribute(
_In_ COORD dwWriteCoord,
_Out_ LPDWORD lpNumberOfAttrsWritten);
WINBASEAPI
BOOL
WINAPI
WriteConsoleOutputCharacterA(
@ -733,6 +962,7 @@ WriteConsoleOutputCharacterA(
_In_ COORD dwWriteCoord,
_Out_ LPDWORD lpNumberOfCharsWritten);
WINBASEAPI
BOOL
WINAPI
WriteConsoleOutputCharacterW(
@ -743,6 +973,22 @@ WriteConsoleOutputCharacterW(
_Out_ LPDWORD lpNumberOfCharsWritten);
#if (NTDDI_VERSION >= NTDDI_WIN10_RS5)
// typedef VOID *HPCON;
// CreatePseudoConsole()
// ResizePseudoConsole()
// ClosePseudoConsole()
#endif // (NTDDI_VERSION >= NTDDI_WIN10_RS5)
#if (NTDDI_VERSION >= NTDDI_WIN11_GE)
/* See https://github.com/microsoft/terminal/blob/main/doc/specs/%237335%20-%20Console%20Allocation%20Policy.md
* and https://github.com/MicrosoftDocs/Console-Docs/pull/323 */
// ALLOC_CONSOLE_MODE, ALLOC_CONSOLE_OPTIONS, ALLOC_CONSOLE_RESULT
// AllocConsoleWithOptions()
// ReleasePseudoConsole()
#endif // (NTDDI_VERSION >= NTDDI_WIN11_GE)
#ifdef UNICODE
#define AddConsoleAlias AddConsoleAliasW
#define GetConsoleAlias GetConsoleAliasW
@ -751,17 +997,16 @@ WriteConsoleOutputCharacterW(
#define GetConsoleAliasExes GetConsoleAliasExesW
#define GetConsoleAliasExesLength GetConsoleAliasExesLengthW
#define GetConsoleTitle GetConsoleTitleW
#define GetConsoleOriginalTitle GetConsoleOriginalTitleW
#define PeekConsoleInput PeekConsoleInputW
#define ReadConsole ReadConsoleW
#define ReadConsoleInput ReadConsoleInputW
#define ReadConsoleInputEx ReadConsoleInputExW
#define ReadConsoleOutput ReadConsoleOutputW
#define ReadConsoleOutputCharacter ReadConsoleOutputCharacterW
#define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferW
#define SetConsoleTitle SetConsoleTitleW
#define WriteConsole WriteConsoleW
#define WriteConsoleInput WriteConsoleInputW
#define WriteConsoleInputVDM WriteConsoleInputVDMW
#define WriteConsoleOutput WriteConsoleOutputW
#define FillConsoleOutputCharacter FillConsoleOutputCharacterW
#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterW
@ -773,17 +1018,16 @@ WriteConsoleOutputCharacterW(
#define GetConsoleAliasExes GetConsoleAliasExesA
#define GetConsoleAliasExesLength GetConsoleAliasExesLengthA
#define GetConsoleTitle GetConsoleTitleA
#define GetConsoleOriginalTitle GetConsoleOriginalTitleA
#define PeekConsoleInput PeekConsoleInputA
#define ReadConsole ReadConsoleA
#define ReadConsoleInput ReadConsoleInputA
#define ReadConsoleInputEx ReadConsoleInputExA
#define ReadConsoleOutput ReadConsoleOutputA
#define ReadConsoleOutputCharacter ReadConsoleOutputCharacterA
#define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferA
#define SetConsoleTitle SetConsoleTitleA
#define WriteConsole WriteConsoleA
#define WriteConsoleInput WriteConsoleInputA
#define WriteConsoleInputVDM WriteConsoleInputVDMA
#define WriteConsoleOutput WriteConsoleOutputA
#define FillConsoleOutputCharacter FillConsoleOutputCharacterA
#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterA
@ -797,4 +1041,4 @@ WriteConsoleOutputCharacterW(
}
#endif
#endif /* _WINCON_H */
#endif /* _WINCON_ */

View file

@ -0,0 +1,623 @@
/*
* PROJECT: ReactOS SDK
* LICENSE: Dual-licensed:
* LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Undocumented Console API definitions, absent from wincon.h
* COPYRIGHT: Copyright 2013-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
*
* REMARK: This header is based on the following resources:
* - https://undoc.airesoft.co.uk/kernel32.dll/
* - https://github.com/microsoft/terminal/blob/main/dep/Console/ntcon.h
* - https://github.com/microsoft/terminal/blob/main/dep/Console/winconp.h
* (commit f08321a0b2)
*/
#ifndef _WINCON_UNDOC_H
#define _WINCON_UNDOC_H
#ifndef _WINCONP_ // As seen in dep/Console/winconp.h
#define _WINCONP_
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) && !defined(NOGDI)
#include "wingdi.h"
#endif
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4820)
#endif
/*
* Console display modes
*/
// These flags are returned by GetConsoleDisplayMode
#define CONSOLE_WINDOWED 0 /* Windowed console */
#if 0 // Defined in wincon.h; kept here for reference.
#define CONSOLE_FULLSCREEN 1 /* Fullscreen console */
#define CONSOLE_FULLSCREEN_HARDWARE 2 /* Console owns the hardware */
// These flags are given to SetConsoleDisplayMode
#define CONSOLE_FULLSCREEN_MODE 1
#define CONSOLE_WINDOWED_MODE 2
#endif
/*
* Color attributes for text and screen background
*/
// #define COMMON_LVB_GRID_RVERTICAL 0x1000
// NOTE: 0x2000 is unused
// #define COMMON_LVB_REVERSE_VIDEO 0x4000
#ifndef COMMON_LVB_SBCSDBCS
#define COMMON_LVB_SBCSDBCS \
(COMMON_LVB_LEADING_BYTE | COMMON_LVB_TRAILING_BYTE) /* == 0x0300 */
#endif
/*
* Screen buffer types for CreateConsoleScreenBuffer().
* See https://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/
*/
// #define CONSOLE_TEXTMODE_BUFFER 1
#define CONSOLE_GRAPHICS_BUFFER 2
/*
* Undocumented Control handler codes,
* additional to CTRL_C_EVENT, CTRL_BREAK_EVENT, CTRL_CLOSE_EVENT,
* CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN_EVENT.
*/
#define CTRL_LAST_CLOSE_EVENT 3 // SYSTEM_ROOT_CONSOLE_EVENT
// 4 is reserved! // SYSTEM_CLOSE_EVENT
/*
* Input mode flags, available since NT 3.51
* but documented only in Vista+ PSDK.
*/
#ifndef ENABLE_INSERT_MODE
#define ENABLE_INSERT_MODE 0x0020
#define ENABLE_QUICK_EDIT_MODE 0x0040
#define ENABLE_EXTENDED_FLAGS 0x0080
#endif
/*
* Console selection flags
*/
#define CONSOLE_SELECTION_INVERTED 0x0010 /* Selection is inverted (turned off) */
#define CONSOLE_SELECTION_VALID (CONSOLE_SELECTION_IN_PROGRESS | \
CONSOLE_SELECTION_NOT_EMPTY | \
CONSOLE_MOUSE_SELECTION | \
CONSOLE_MOUSE_DOWN)
/*
* History information and mode flags
*/
#ifndef HISTORY_NO_DUP_FLAG // (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
// For Get/SetConsoleHistoryInfo
#define HISTORY_NO_DUP_FLAG 0x0001
#endif
#ifndef CONSOLE_OVERSTRIKE // (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
// For SetConsoleCommandHistoryMode
#define CONSOLE_OVERSTRIKE 0x0001
#endif
/* Always existed, but was added in official PSDK in Windows Vista/7.
* Kept here for reference. */
#if 0
typedef struct _CONSOLE_READCONSOLE_CONTROL {
ULONG nLength;
ULONG nInitialChars;
ULONG dwCtrlWakeupMask;
ULONG dwControlKeyState;
} CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL;
#endif
/*
* This is the graphics counterpart to text-mode CONSOLE_SCREEN_BUFFER_INFO.
* See https://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/
*/
#if defined(_WINGDI_) && !defined(NOGDI)
typedef struct _CONSOLE_GRAPHICS_BUFFER_INFO {
DWORD dwBitMapInfoLength;
LPBITMAPINFO lpBitMapInfo;
DWORD dwUsage; // DIB_PAL_COLORS or DIB_RGB_COLORS
HANDLE hMutex;
PVOID lpBitMap;
} CONSOLE_GRAPHICS_BUFFER_INFO, *PCONSOLE_GRAPHICS_BUFFER_INFO;
#endif
// typedef struct _KEY_EVENT_RECORD { ... } KEY_EVENT_RECORD, *PKEY_EVENT_RECORD;
C_ASSERT(FIELD_OFFSET(KEY_EVENT_RECORD, uChar) == 0xA);
#define EXENAME_LENGTH (255 + 1)
WINBASEAPI
DWORD
WINAPI
GetConsoleInputExeNameA(
_In_ DWORD nBufferLength,
_Out_writes_(nBufferLength) LPSTR lpExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleInputExeNameW(
_In_ DWORD nBufferLength,
_Out_writes_(nBufferLength) LPWSTR lpExeName);
WINBASEAPI
BOOL
WINAPI
SetConsoleInputExeNameA(
_In_ LPCSTR lpExeName);
WINBASEAPI
BOOL
WINAPI
SetConsoleInputExeNameW(
_In_ LPCWSTR lpExeName);
WINBASEAPI
VOID
WINAPI
ExpungeConsoleCommandHistoryA(
_In_ LPCSTR lpExeName);
WINBASEAPI
VOID
WINAPI
ExpungeConsoleCommandHistoryW(
_In_ LPCWSTR lpExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleCommandHistoryA(
_Out_writes_bytes_(cbHistory) LPSTR lpHistory,
_In_ DWORD cbHistory,
_In_ LPCSTR lpExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleCommandHistoryW(
_Out_writes_bytes_(cbHistory) LPWSTR lpHistory,
_In_ DWORD cbHistory,
_In_ LPCWSTR lpExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleCommandHistoryLengthA(
_In_ LPCSTR lpExeName);
WINBASEAPI
DWORD
WINAPI
GetConsoleCommandHistoryLengthW(
_In_ LPCWSTR lpExeName);
WINBASEAPI
BOOL
WINAPI
SetConsoleNumberOfCommandsA(
_In_ DWORD dwNumCommands,
_In_ LPCSTR lpExeName);
WINBASEAPI
BOOL
WINAPI
SetConsoleNumberOfCommandsW(
_In_ DWORD dwNumCommands,
_In_ LPCWSTR lpExeName);
/*
* See https://undoc.airesoft.co.uk/kernel32.dll/InvalidateConsoleDIBits.php
* and https://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/
*/
WINBASEAPI
BOOL
WINAPI
InvalidateConsoleDIBits(
_In_ HANDLE hConsoleOutput,
_In_ PSMALL_RECT lpRect);
WINBASEAPI
BOOL
WINAPI
GetConsoleHardwareState(
_In_ HANDLE hConsoleOutput,
_Out_ PDWORD Flags,
_Out_ PDWORD State);
#if 0 // FIXME: How https://github.com/microsoft/terminal/blob/main/dep/Console/winconp.h sees it:
WINBASEAPI
BOOL
WINAPI
GetConsoleHardwareState(
_In_ HANDLE hConsoleOutput,
_Out_ PCOORD lpResolution,
_Out_ PCOORD lpFontSize);
#endif
WINBASEAPI
BOOL
WINAPI
SetConsoleHardwareState(
_In_ HANDLE hConsoleOutput,
_In_ DWORD Flags,
_In_ DWORD State);
#if 0 // FIXME: How https://github.com/microsoft/terminal/blob/main/dep/Console/winconp.h sees it:
WINBASEAPI
BOOL
WINAPI
SetConsoleHardwareState(
_In_ HANDLE hConsoleOutput,
_In_ COORD dwResolution,
_In_ COORD dwFontSize);
#endif
#define CONSOLE_NOSHORTCUTKEY 0x00000000 /* No shortcut key */
#define CONSOLE_ALTTAB 0x00000001 /* Alt + Tab */
#define CONSOLE_ALTESC 0x00000002 /* Alt + Escape */
#define CONSOLE_ALTSPACE 0x00000004 /* Alt + Space */
#define CONSOLE_ALTENTER 0x00000008 /* Alt + Enter */
#define CONSOLE_ALTPRTSC 0x00000010 /* Alt Print screen */
#define CONSOLE_PRTSC 0x00000020 /* Print screen */
#define CONSOLE_CTRLESC 0x00000040 /* Ctrl + Escape */
typedef struct _APPKEY {
WORD Modifier;
WORD ScanCode;
} APPKEY, *LPAPPKEY;
#define CONSOLE_MODIFIER_SHIFT 0x0003 // Left shift key
#define CONSOLE_MODIFIER_CONTROL 0x0004 // Either Control shift key
#define CONSOLE_MODIFIER_ALT 0x0008 // Either Alt shift key
WINBASEAPI
BOOL
WINAPI
SetConsoleKeyShortcuts(
_In_ BOOL bSet,
_In_ BYTE bReserveKeys,
_In_reads_(dwNumAppKeys) LPAPPKEY lpAppKeys,
_In_ DWORD dwNumAppKeys);
#ifndef KL_NAMELENGTH // Defined in winuser.h
#define KL_NAMELENGTH 9
#endif
WINBASEAPI
BOOL
WINAPI
GetConsoleKeyboardLayoutNameA(
_Out_writes_(KL_NAMELENGTH) LPSTR pszLayout);
WINBASEAPI
BOOL
WINAPI
GetConsoleKeyboardLayoutNameW(
_Out_writes_(KL_NAMELENGTH) LPWSTR pszLayout);
WINBASEAPI
DWORD
WINAPI
SetLastConsoleEventActive(VOID);
/*
* ReadConsoleInputExA/W, now documented at:
* https://learn.microsoft.com/en-us/windows/console/readconsoleinputex
*/
/*
* Read input flags for ReadConsoleInputExA/W
*/
#define CONSOLE_READ_NOREMOVE 0x0001
#define CONSOLE_READ_NOWAIT 0x0002
#define CONSOLE_READ_VALID (CONSOLE_READ_NOREMOVE | CONSOLE_READ_NOWAIT)
WINBASEAPI
_Success_(return != FALSE)
BOOL
WINAPI
ReadConsoleInputExA(
_In_ HANDLE hConsoleInput,
_Out_writes_to_(nLength, *lpNumberOfEventsRead) PINPUT_RECORD lpBuffer,
_In_ DWORD nLength,
_Out_ _Deref_out_range_(<=, nLength) LPDWORD lpNumberOfEventsRead,
_In_ WORD wFlags);
WINBASEAPI
_Success_(return != FALSE)
BOOL
WINAPI
ReadConsoleInputExW(
_In_ HANDLE hConsoleInput,
_Out_writes_to_(nLength, *lpNumberOfEventsRead) PINPUT_RECORD lpBuffer,
_In_ DWORD nLength,
_Out_ _Deref_out_range_(<=, nLength) LPDWORD lpNumberOfEventsRead,
_In_ WORD wFlags);
/* See https://undoc.airesoft.co.uk/kernel32.dll/ConsoleMenuControl.php */
WINBASEAPI
HMENU
WINAPI
ConsoleMenuControl(
_In_ HANDLE hConsoleOutput,
_In_ DWORD dwCmdIdLow,
_In_ DWORD dwCmdIdHigh);
WINBASEAPI
BOOL
WINAPI
SetConsoleMenuClose(
_In_ BOOL bEnable);
/* See https://undoc.airesoft.co.uk/kernel32.dll/SetConsoleCursor.php */
WINBASEAPI
BOOL
WINAPI
SetConsoleCursor(
_In_ HANDLE hConsoleOutput,
_In_ HCURSOR hCursor);
/* See https://undoc.airesoft.co.uk/kernel32.dll/ShowConsoleCursor.php */
WINBASEAPI
INT
WINAPI
ShowConsoleCursor(
_In_ HANDLE hConsoleOutput,
_In_ BOOL bShow);
WINBASEAPI
BOOL
WINAPI
SetConsoleFont(
_In_ HANDLE hConsoleOutput,
_In_ DWORD nFont);
WINBASEAPI
DWORD
WINAPI
GetConsoleFontInfo(
_In_ HANDLE hConsoleOutput,
_In_ BOOL bMaximumWindow,
_In_ DWORD nFontCount,
_Out_ PCONSOLE_FONT_INFO lpConsoleFontInfo);
WINBASEAPI
DWORD
WINAPI
GetNumberOfConsoleFonts(VOID);
WINBASEAPI
BOOL
WINAPI
SetConsoleIcon(
_In_ HICON hIcon);
/* See http://comments.gmane.org/gmane.comp.lang.harbour.devel/27844 */
WINBASEAPI
BOOL
WINAPI
SetConsolePalette(
_In_ HANDLE hConsoleOutput,
_In_ HPALETTE hPalette,
_In_ UINT dwUsage);
WINBASEAPI
HANDLE
WINAPI
OpenConsoleW(
_In_ LPCWSTR wsName,
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ DWORD dwShareMode);
WINBASEAPI
BOOL
WINAPI
CloseConsoleHandle(
_In_ HANDLE hHandle);
WINBASEAPI
HANDLE
WINAPI
DuplicateConsoleHandle(
_In_ HANDLE hSourceHandle,
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ DWORD dwOptions);
WINBASEAPI
HANDLE
WINAPI
GetConsoleInputWaitHandle(VOID);
WINBASEAPI
BOOL
WINAPI
VerifyConsoleIoHandle(
_In_ HANDLE hIoHandle);
/*
* dwRegisterFlags for RegisterConsoleVDM
*/
#define CONSOLE_UNREGISTER_VDM 0
#define CONSOLE_REGISTER_VDM 1
#define CONSOLE_REGISTER_WOW 2
WINBASEAPI
BOOL
WINAPI
RegisterConsoleVDM(
_In_ DWORD dwRegisterFlags,
_In_ HANDLE hStartHardwareEvent,
_In_ HANDLE hEndHardwareEvent,
_In_ HANDLE hErrorHardwareEvent,
_Reserved_ DWORD Reserved,
_Out_ LPDWORD lpVideoStateLength,
_Outptr_ PVOID* lpVideoState, // PVIDEO_HARDWARE_STATE_HEADER*
_In_ PVOID lpUnusedBuffer,
_In_ DWORD dwUnusedBufferLength,
_In_ COORD dwVDMBufferSize,
_Outptr_ PVOID* lpVDMBuffer);
/*
* iFunction for VDMConsoleOperation
*/
#define VDM_HIDE_WINDOW 1
#define VDM_IS_ICONIC 2
#define VDM_CLIENT_RECT 3
#define VDM_CLIENT_TO_SCREEN 4
#define VDM_SCREEN_TO_CLIENT 5
#define VDM_IS_HIDDEN 6
#define VDM_FULLSCREEN_NOPAINT 7
#define VDM_SET_VIDEO_MODE 8
WINBASEAPI
BOOL
WINAPI
VDMConsoleOperation(
_In_ DWORD iFunction,
_Inout_opt_ LPVOID lpData);
WINBASEAPI
BOOL
WINAPI
WriteConsoleInputVDMA(
_In_ HANDLE hConsoleInput,
_In_reads_(nLength) CONST INPUT_RECORD *lpBuffer,
_In_ DWORD nLength,
_Out_ LPDWORD lpNumberOfEventsWritten);
WINBASEAPI
BOOL
WINAPI
WriteConsoleInputVDMW(
_In_ HANDLE hConsoleInput,
_In_reads_(nLength) CONST INPUT_RECORD *lpBuffer,
_In_ DWORD nLength,
_Out_ LPDWORD lpNumberOfEventsWritten);
WINBASEAPI
BOOL
WINAPI
GetConsoleNlsMode(
_In_ HANDLE hConsole,
_Out_ PDWORD lpdwNlsMode);
WINBASEAPI
BOOL
WINAPI
SetConsoleNlsMode(
_In_ HANDLE hConsole,
_In_ DWORD fdwNlsMode);
WINBASEAPI
BOOL
WINAPI
GetConsoleCharType(
_In_ HANDLE hConsole,
_In_ COORD coordCheck,
_Out_ PDWORD pdwType);
/* Character type returned by GetConsoleCharType */
#define CHAR_TYPE_SBCS 0 // Displayed SBCS character
#define CHAR_TYPE_LEADING 2 // Displayed leading byte of DBCS
#define CHAR_TYPE_TRAILING 3 // Displayed trailing byte of DBCS
WINBASEAPI
BOOL
WINAPI
SetConsoleLocalEUDC(
_In_ HANDLE hConsoleHandle,
_In_ WORD wCodePoint,
_In_ COORD cFontSize,
_In_ PCHAR lpSB);
WINBASEAPI
BOOL
WINAPI
SetConsoleCursorMode(
_In_ HANDLE hConsoleHandle,
_In_ BOOL Blink,
_In_ BOOL DBEnable);
WINBASEAPI
BOOL
WINAPI
GetConsoleCursorMode(
_In_ HANDLE hConsoleHandle,
_Out_ PBOOL pbBlink,
_Out_ PBOOL pbDBEnable);
WINBASEAPI
BOOL
WINAPI
RegisterConsoleOS2(
_In_ BOOL fOs2Register);
WINBASEAPI
BOOL
WINAPI
SetConsoleOS2OemFormat(
_In_ BOOL fOs2OemFormat);
#if defined(FE_IME) || defined(__REACTOS__)
WINBASEAPI
BOOL
WINAPI
RegisterConsoleIME(
_In_ HWND hWndConsoleIME,
_Out_opt_ DWORD *lpdwConsoleThreadId);
WINBASEAPI
BOOL
WINAPI
UnregisterConsoleIME(VOID);
#endif // FE_IME
#ifdef UNICODE
#define GetConsoleInputExeName GetConsoleInputExeNameW
#define SetConsoleInputExeName SetConsoleInputExeNameW
#define ExpungeConsoleCommandHistory ExpungeConsoleCommandHistoryW
#define GetConsoleCommandHistory GetConsoleCommandHistoryW
#define GetConsoleCommandHistoryLength GetConsoleCommandHistoryLengthW
#define SetConsoleNumberOfCommands SetConsoleNumberOfCommandsW
#define GetConsoleKeyboardLayoutName GetConsoleKeyboardLayoutNameW
#define ReadConsoleInputEx ReadConsoleInputExW
#define WriteConsoleInputVDM WriteConsoleInputVDMW
#else
#define GetConsoleInputExeName GetConsoleInputExeNameA
#define SetConsoleInputExeName SetConsoleInputExeNameA
#define ExpungeConsoleCommandHistory ExpungeConsoleCommandHistoryA
#define GetConsoleCommandHistory GetConsoleCommandHistoryA
#define GetConsoleCommandHistoryLength GetConsoleCommandHistoryLengthA
#define SetConsoleNumberOfCommands SetConsoleNumberOfCommandsA
#define GetConsoleKeyboardLayoutName GetConsoleKeyboardLayoutNameA
#define ReadConsoleInputEx ReadConsoleInputExA
#define WriteConsoleInputVDM WriteConsoleInputVDMA
#endif
#ifdef _MSC_VER
#pragma warning(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif /* _WINCONP_ */
#endif /* _WINCON_UNDOC_H */