Blob Blame History Raw
#ifndef NTCON_H
#define NTCON_H

#include "ntcon_api.h"

#ifdef __cplusplus
extern "C" {
#endif

/* console standard handles */
#define NT_STD_INPUT_HANDLE		(uint32_t)-10
#define NT_STD_OUTPUT_HANDLE		(uint32_t)-11
#define NT_STD_ERROR_HANDLE		(uint32_t)-12

/* console attachment */
#define NT_ATTACH_PARENT_PROCESS	(uint32_t)-1

/* console screen buffer flags */
#define NT_CONSOLE_TEXTMODE_BUFFER	(0x01)

/* console control signals */
#define NT_CTRL_C_EVENT			(0x00)
#define NT_CTRL_BREAK_EVENT		(0x01)
#define NT_CTRL_CLOSE_EVENT		(0x02)
#define NT_CTRL_LOGOFF_EVENT		(0x05)
#define NT_CTRL_SHUTDOWN_EVENT		(0x06)

/* console history flags */
#define NT_HISTORY_NO_DUP_FLAG		(0x0001)

/* console event types */
#define NT_KEY_EVENT			(0x0001)
#define NT_MOUSE_EVENT			(0x0002)
#define NT_WINDOW_BUFFER_SIZE_EVENT	(0x0004)
#define NT_MENU_EVENT			(0x0008)
#define NT_FOCUS_EVENT			(0x0010)

/* control key states */
#define NT_RIGHT_ALT_PRESSED		(0x0001)
#define NT_LEFT_ALT_PRESSED		(0x0002)
#define NT_RIGHT_CTRL_PRESSED		(0x0004)
#define NT_LEFT_CTRL_PRESSED		(0x0008)
#define NT_SHIFT_PRESSED		(0x0010)
#define NT_NUMLOCK_ON			(0x0020)
#define NT_SCROLLLOCK_ON		(0x0040)
#define NT_CAPSLOCK_ON			(0x0080)
#define NT_ENHANCED_KEY			(0x0100)

/* console foreground color attributes */
#define NT_FOREGROUND_BLACK		(0x0000)
#define NT_FOREGROUND_BLUE		(0x0001)
#define NT_FOREGROUND_GREEN		(0x0002)
#define NT_FOREGROUND_CYAN		(0x0003)
#define NT_FOREGROUND_RED		(0x0004)
#define NT_FOREGROUND_MAGENTA		(0x0005)
#define NT_FOREGROUND_YELLOW		(0x0006)
#define NT_FOREGROUND_WHITE		(0x0007)
#define NT_FOREGROUND_INTENSITY		(0x0008)

/* console background color attributes */
#define NT_BACKGROUND_BLACK		(0x0000)
#define NT_BACKGROUND_BLUE		(0x0010)
#define NT_BACKGROUND_GREEN		(0x0020)
#define NT_BACKGROUND_CYAN		(0x0030)
#define NT_BACKGROUND_RED		(0x0040)
#define NT_BACKGROUND_MAGENTA		(0x0050)
#define NT_BACKGROUND_YELLOW		(0x0060)
#define NT_BACKGROUND_WHITE		(0x0070)
#define NT_BACKGROUND_INTENSITY		(0x0080)

/* console common lvb attributes */
#define NT_COMMON_LVB_LEADING_BYTE	(0x0100)
#define NT_COMMON_LVB_TRAILING_BYTE	(0x0200)
#define NT_COMMON_LVB_GRID_HORIZONTAL	(0x0400)
#define NT_COMMON_LVB_GRID_LVERTICAL	(0x0800)
#define NT_COMMON_LVB_GRID_RVERTICAL	(0x1000)
#define NT_COMMON_LVB_REVERSE_VIDEO	(0x4000)
#define NT_COMMON_LVB_UNDERSCORE	(0x8000)

/* console font name length limit */
#define NT_LF_FACESIZE			(0x20)

/* console font families */
#define NT_FF_DONTCARE		(0x0 << 4)
#define NT_FF_ROMAN		(0x1 << 4)
#define NT_FF_SWISS		(0x2 << 4)
#define NT_FF_MODERN		(0x3 << 4)
#define NT_FF_SCRIPT		(0x4 << 4)
#define NT_FF_DECORATIVE	(0x5 << 4)

/* console font weight */
#define NT_FW_DONTCARE		0
#define NT_FW_THIN		100
#define NT_FW_EXTRALIGHT	200
#define NT_FW_ULTRALIGHT	200
#define NT_FW_LIGHT		300
#define NT_FW_NORMAL		400
#define NT_FW_REGULAR		400
#define NT_FW_MEDIUM		500
#define NT_FW_SEMIBOLD		600
#define NT_FW_DEMIBOLD		600
#define NT_FW_BOLD		700
#define NT_FW_EXTRABOLD		800
#define NT_FW_ULTRABOLD		800
#define NT_FW_HEAVY		900
#define NT_FW_BLACK		900

/* console selection bits */
#define NT_CONSOLE_NO_SELECTION			(0x0000)
#define NT_CONSOLE_SELECTION_IN_PROGRESS	(0x0001)
#define NT_CONSOLE_SELECTION_NOT_EMPTY		(0x0002)
#define NT_CONSOLE_MOUSE_SELECTION		(0x0004)
#define NT_CONSOLE_MOUSE_DOWN			(0x0008)

/* console mode bits */
#define NT_ENABLE_PROCESSED_INPUT	(0x0001)
#define NT_ENABLE_LINE_INPUT		(0x0002)
#define NT_ENABLE_ECHO_INPUT		(0x0004)
#define NT_ENABLE_WINDOW_INPUT		(0x0008)
#define NT_ENABLE_MOUSE_INPUT		(0x0010)
#define NT_ENABLE_INSERT_MODE		(0x0020)
#define NT_ENABLE_QUICK_EDIT_MODE	(0x0040)
#define NT_ENABLE_EXTENDED_FLAGS	(0x0080)

/* console display modes */
#define NT_CONSOLE_FULLSCREEN		(0x0001)
#define NT_CONSOLE_FULLSCREEN_HARDWARE	(0x0002)


/* console structures */
typedef struct _nt_coord {
	int16_t	x;
	int16_t	y;
} nt_coord;


typedef struct _nt_small_rect {
	int16_t		left;
	int16_t		top;
	int16_t		right;
	int16_t		bottom;
} nt_small_rect;


typedef struct _nt_char_info {
	union {
		wchar16_t	unicode_char;
		char		ascii_char;
	};

	uint16_t	attributes;
} nt_char_info;


typedef struct _nt_console_cursor_info {
	uint32_t	size;
	int32_t		visible;
} nt_console_cursor_info;


typedef struct _nt_console_font_info {
	uint32_t	font;
	nt_coord	font_size;
} nt_console_font_info;


typedef struct _nt_console_font_info_ex {
	uint32_t	info_size;
	uint32_t	font;
	nt_coord	font_size;
	uint32_t	font_family;
	uint32_t	font_weight;
	wchar16_t	face_name[NT_LF_FACESIZE];
} nt_console_font_info_ex;


typedef struct _nt_console_history_info {
	uint32_t	info_size;
	uint32_t	history_buffer_size;
	uint32_t	history_buffer_count;
	uint32_t	flags;
} nt_console_history_info;


typedef struct _nt_key_event_record {
	int32_t		key_down;
	uint16_t	repeat_count;
	uint16_t	virtual_key_code;
	uint16_t	virtual_scan_code;

	union {
		wchar16_t	unicode_char;
		char		ascii_char;
	};

	uint32_t	control_key_state;
} nt_key_event_record;


typedef struct _nt_mouse_event_record {
	nt_coord	mouse_position;
	uint32_t	button_state;
	uint32_t	control_key_state;
	uint32_t	event_flags;
} nt_mouse_event_record;


typedef struct _nt_window_buffer_size_record {
	nt_coord	size;
} nt_window_buffer_size_record;


typedef struct _nt_menu_event_record {
	uint32_t	command_id;
} nt_menu_event_record;


typedef struct _nt_focus_event_record {
	int32_t		set_focus;
} nt_focus_event_record;


typedef struct _nt_input_record {
	uint16_t	event_type;

	union {
		nt_key_event_record		key_event;
		nt_mouse_event_record		mouse_event;
		nt_window_buffer_size_record	window_event;
		nt_menu_event_record		menu_event;
		nt_focus_event_record		focus_event;
	};
} nt_input_record;


typedef struct _nt_console_screen_buffer_info {
	nt_coord	size;
	nt_coord	cursor_position;
	uint16_t	attributes;
	nt_small_rect	window;
	nt_coord	max_windows_size;
} nt_console_screen_buffer_info;


typedef struct _nt_console_screen_buffer_info_ex {
	uint16_t	info_size;
	nt_coord	size;
	nt_coord	cursor_position;
	uint16_t	attributes;
	nt_small_rect	window;
	nt_coord	max_windows_size;
	uint16_t	popup_attributes;
	int32_t		full_screen_supported;
	uint32_t	color_table[0x10];
} nt_console_screen_buffer_info_ex;


typedef struct _nt_console_read_console_control {
	uint32_t	length;
	uint32_t	initial_chars;
	uint32_t	crtl_wakeup_mask;
	uint32_t	ctrl_key_state;
} nt_console_read_console_control;


typedef struct _nt_console_selection_info {
	uint32_t	flags;
	nt_coord	selection_anchor;
	nt_small_rect	selection;
} nt_console_selection_info;


/* console api: console handles */
typedef int32_t __stdcall	ntcon_alloc_console(void);


typedef int32_t __stdcall	ntcon_attach_console(uint32_t pid);


typedef int32_t __stdcall	ntcon_free_console(void);


typedef void *	__stdcall	ntcon_get_std_handle(uint32_t ntcon_std_type);


/* console api: read/write using std handles */
typedef int32_t __stdcall	ntcon_get_number_of_console_input_events(
	__in	void *		hconin,
	__out	uint32_t *	number_of_events);


typedef int32_t __stdcall	ntcon_flush_console_input_buffer(
	__in	void *	hconin);


typedef int32_t __stdcall	ntcon_peek_console_input_ansi(
	__in	void *			hconin,
	__out	nt_input_record *	buffer,
	__in	uint32_t		length,
	__out	uint32_t *		events_read);


typedef int32_t __stdcall	ntcon_peek_console_input_utf16(
	__in	void *			hconin,
	__out	nt_input_record *	buffer,
	__in	uint32_t		length,
	__out	uint32_t *		events_read);


typedef int32_t __stdcall	ntcon_read_console_ansi(
	__in	void *		hconsole,
	__out	char *		buffer,
	__in	uint32_t	chars_to_read,
	__out	uint32_t *	chars_read,
	__in	void *		input_control	__optional);


typedef int32_t __stdcall	ntcon_read_console_utf16(
	__in	void *		hconsole,
	__out	wchar16_t *	buffer,
	__in	uint32_t	chars_to_read,
	__out	uint32_t *	chars_read,
	__in	void *		input_control	__optional);


typedef int32_t __stdcall	ntcon_read_console_input_ansi(
	__in	void *			hconin,
	__out	nt_input_record *	buffer,
	__in	uint32_t		length,
	__out	uint32_t *		events_read);


typedef int32_t __stdcall	ntcon_read_console_input_utf16(
	__in	void *			hconin,
	__out	nt_input_record *	buffer,
	__in	uint32_t		length,
	__out	uint32_t *		events_read);


typedef int32_t __stdcall	ntcon_read_console_output_ansi(
	__in		void *		hconout,
	__out		nt_char_info *	buffer,
	__in		nt_coord	buffer_size,
	__in		nt_coord	buffer_coord,
	__in_out	nt_small_rect *	read_region);


typedef int32_t __stdcall	ntcon_read_console_output_utf16(
	__in		void *		hconout,
	__out		nt_char_info *	buffer,
	__in		nt_coord	buffer_size,
	__in		nt_coord	buffer_coord,
	__in_out	nt_small_rect *	read_region);


typedef int32_t	__stdcall	ntcon_write_console_ansi(
	__in		void *		hconsole,
	__in		const void *	buffer,
	__in		uint32_t	bytes_sent,
	__out		uint32_t *	bytes_written,
	__in_out	void *		overlapped	__optional);

typedef int32_t	__stdcall	ntcon_write_console_utf16(
	__in		void *		hconsole,
	__in		const void *	buffer,
	__in		uint32_t	bytes_sent,
	__out		uint32_t *	bytes_written,
	__in_out	void *		overlapped	__optional);


typedef int32_t __stdcall	ntcon_write_console_input_ansi(
	__in	void *			hconin,
	__in	const nt_input_record *	buffer,
	__in	uint32_t		length,
	__out	uint32_t *		events_written);


typedef int32_t __stdcall	ntcon_write_console_input_utf16(
	__in	void *			hconin,
	__in	const nt_input_record *	buffer,
	__in	uint32_t		length,
	__out	uint32_t *		events_written);


typedef int32_t __stdcall	ntcon_write_console_output_ansi(
	__in		void *			hconout,
	__in		const nt_char_info *	buffer,
	__in		nt_coord		buffer_size,
	__in		nt_coord		buffer_coord,
	__in_out	nt_small_rect *		write_region);


typedef int32_t __stdcall	ntcon_write_console_output_utf16(
	__in		void *			hconout,
	__in		const nt_char_info *	buffer,
	__in		nt_coord		buffer_size,
	__in		nt_coord		buffer_coord,
	__in_out	nt_small_rect *		write_region);


/* console api: screen buffers */
typedef struct _nt_security_attributes nt_security_attributes;

typedef void * __stdcall	ntcon_create_console_screen_buffer(
	__in	uint32_t			desired_access,
	__in	uint32_t			share_mode,
	__in	nt_security_attributes *	sec_attr	__optional,
	__in	uint32_t			flags,
	__in	void *				reserved);


typedef int32_t __stdcall	ntcon_get_console_screen_buffer_info(
	__in	void *					hconout,
	__out	nt_console_screen_buffer_info *		con_screen_buffer_info);


typedef int32_t __stdcall	ntcon_get_console_screen_buffer_info_ex(
	__in	void *					hconout,
	__out	nt_console_screen_buffer_info_ex *	con_screen_buffer_info_ex);


typedef int32_t __stdcall	ntcon_set_console_screen_buffer_info_ex(
	__in	void *					hconout,
	__out	nt_console_screen_buffer_info_ex *	con_screen_buffer_info_ex);


typedef int32_t __stdcall	ntcon_set_console_screen_buffer_size(
	__in	void *		hconout,
	__in	nt_coord	size);


typedef int32_t __stdcall	ntcon_set_console_active_screen_buffer(
	__in	void *	hconout);


typedef int32_t __stdcall	ntcon_set_console_window_info(
	__in	void *			hconout,
	__in	int32_t			absolute,
	__in	const nt_small_rect *	console_window);


typedef int32_t __stdcall	ntcon_scroll_console_screen_buffer_ansi(
	__in	void *			hconout,
	__in	const nt_small_rect *	scroll_rect,
	__in	const nt_small_rect *	clip_rect	__optional,
	__in	nt_coord		dest_origin,
	__in	const nt_char_info *	fill);


typedef int32_t __stdcall	ntcon_scroll_console_screen_buffer_utf16(
	__in	void *			hconout,
	__in	const nt_small_rect *	scroll_rect,
	__in	const nt_small_rect *	clip_rect	__optional,
	__in	nt_coord		dest_origin,
	__in	const nt_char_info *	fill);


/* console api: code page */
typedef uint32_t __stdcall	ntcon_get_console_code_page(void);


typedef int32_t __stdcall	ntcon_set_console_code_page(uint32_t code_page);


/* console api: console control */
typedef int32_t __stdcall	nt_console_handler_routine(
	__in	uint32_t	console_ctrl_type);


typedef int32_t __stdcall	ntcon_generate_console_ctrl_event(
	__in	uint32_t	ctrl_event,
	__in	uint32_t	process_group_id);


typedef int32_t __stdcall	ntcon_set_console_ctrl_handler(
	__in	nt_console_handler_routine *	handler_routine	__optional,
	__in	int32_t				add_or_remove);


/* console api: interface mode */
typedef int32_t __stdcall	ntcon_get_console_mode(
	__in	void *		hconsole,
	__out	uint32_t *	mode);


typedef int32_t __stdcall	ntcon_set_console_mode(
	__in	void *		hconsole,
	__in	uint32_t	mode);


/* console api: console process list */
typedef uint32_t __stdcall	ntcon_get_console_process_list(
	__out	uint32_t *	process_list,
	__in	uint32_t	process_count);


/* console api: aliases */
typedef int32_t __stdcall	ntcon_add_console_alias_ansi(
	__in	char *		source,
	__in	char *		target,
	__in	char *		exe_name);


typedef int32_t __stdcall	ntcon_add_console_alias_utf16(
	__in	wchar16_t *	source,
	__in	wchar16_t *	target,
	__in	wchar16_t *	exe_name);


typedef uint32_t __stdcall	ntcon_get_console_alias_ansi(
	__in	char *		source,
	__out	char *		target_buffer,
	__in	uint32_t	target_buffer_length,
	__in	char *		exe_name);


typedef uint32_t __stdcall	ntcon_get_console_alias_utf16(
	__in	wchar16_t *	source,
	__out	wchar16_t *	target_buffer,
	__in	uint32_t	target_buffer_length,
	__in	wchar16_t *	exe_name);


typedef uint32_t __stdcall	ntcon_get_console_aliases_ansi(
	__out	char *		alias_buffer,
	__in	uint32_t	alias_buffer_length,
	__in	char *		exe_name);


typedef uint32_t __stdcall	ntcon_get_console_aliases_utf16(
	__out	wchar16_t *	alias_buffer,
	__in	uint32_t	alias_buffer_length,
	__in	wchar16_t *	exe_name);


typedef uint32_t __stdcall	ntcon_get_console_aliases_length_ansi(
	__in	char *		exe_name);


typedef uint32_t __stdcall	ntcon_get_console_aliases_length_utf16(
	__in	wchar16_t *	exe_name);


typedef uint32_t __stdcall	ntcon_get_console_alias_exes_ansi(
	__out	char *		exe_name_buffer,
	__in	uint32_t	exe_name_buffer_length);


typedef uint32_t __stdcall	ntcon_get_console_alias_exes_utf16(
	__out	wchar16_t *	exe_name_buffer,
	__in	uint32_t	exe_name_buffer_length);


typedef uint32_t __stdcall	ntcon_get_console_alias_exes_length_ansi(void);


typedef uint32_t __stdcall	ntcon_get_console_alias_exes_length_utf16(void);


/* console api: output attributes */
typedef int32_t __stdcall	ntcon_fill_console_output_attribute(
	__in	void *		hconout,
	__in	uint16_t	attribute,
	__in	uint32_t	length,
	__in	nt_coord	write_coord,
	__out	uint32_t *	attrs_written);


typedef int32_t __stdcall	ntcon_read_console_output_attribute(
	__in	void *		hconout,
	__in	uint16_t *	attribute,
	__in	uint32_t	length,
	__in	nt_coord	read_coord,
	__out	uint32_t *	attrs_read);


typedef int32_t __stdcall	ntcon_write_console_output_attribute(
	__in	void *		hconout,
	__in	uint16_t *	attribute,
	__in	uint32_t	length,
	__in	nt_coord	write_coord,
	__out	uint32_t *	attrs_written);


/* console api: output characters */
typedef int32_t __stdcall	ntcon_fill_console_output_character_ansi(
	__in	void *		hconout,
	__in	char		character,
	__in	uint32_t	length,
	__in	nt_coord	write_coord,
	__out	uint32_t *	chars_written);


typedef int32_t __stdcall	ntcon_fill_console_output_character_utf16(
	__in	void *		hconout,
	__in	wchar16_t	character,
	__in	uint32_t	length,
	__in	nt_coord	write_coord,
	__out	uint32_t *	chars_written);


typedef int32_t __stdcall	ntcon_read_console_output_character_ansi(
	__in	void *		hconout,
	__in	char *		character,
	__in	uint32_t	length,
	__in	nt_coord	read_coord,
	__out	uint32_t *	chars_read);


typedef int32_t __stdcall	ntcon_read_console_output_character_utf16(
	__in	void *		hconout,
	__in	wchar16_t *	character,
	__in	uint32_t	length,
	__in	nt_coord	read_coord,
	__out	uint32_t *	chars_read);


typedef int32_t __stdcall	ntcon_write_console_output_character_ansi(
	__in	void *		hconout,
	__in	char *		character,
	__in	uint32_t	length,
	__in	nt_coord	write_coord,
	__out	uint32_t *	chars_written);


typedef int32_t __stdcall	ntcon_write_console_output_character_utf16(
	__in	void *		hconout,
	__in	wchar16_t *	character,
	__in	uint32_t	length,
	__in	nt_coord	write_coord,
	__out	uint32_t *	chars_written);


/* console api: output code page */
typedef uint32_t __stdcall	ntcon_get_console_output_code_page(void);


typedef int32_t __stdcall	ntcon_set_console_output_code_page(
	__in	uint32_t	code_page_id);


/* console api: text attributes */
typedef int32_t __stdcall	ntcon_set_console_text_attribute(
	__in	void *		hconout,
	__in	uint16_t	attributes);


/* console api: cursor info */
typedef int32_t __stdcall	ntcon_get_console_cursor_info(
	__in	void *				hconout,
	__out	nt_console_cursor_info *	console_cursor_info);


typedef int32_t __stdcall	ntcon_set_console_cursor_info(
	__in	void *				hconout,
	__in	const nt_console_cursor_info *	console_cursor_info);


typedef int32_t __stdcall	ntcon_set_console_cursor_position(
	__in	void *		hconout,
	__out	nt_coord	cursor_position);


/* console api: selection info */
typedef int32_t __stdcall	ntcon_get_console_selection_info(
	__out	nt_console_selection_info *	console_selection_info);


/* console api: history info */
typedef int32_t __stdcall	ntcon_get_console_history_info(
	__out	nt_console_history_info *	console_history_info);


typedef int32_t __stdcall	ntcon_set_console_history_info(
	__in	nt_console_history_info *	console_history_info);


/* console api: font info */
typedef nt_coord __stdcall	ntcon_get_console_font_size(
	__in	void *			hconout,
	__in	uint32_t		font);


typedef int32_t __stdcall	ntcon_get_current_console_font(
	__in	void *			hconout,
	__in	int32_t			maximum_window,
	__out	nt_console_font_info *	console_current_font);


typedef int32_t __stdcall	ntcon_get_current_console_font_ex(
	__in	void *				hconout,
	__in	int32_t				maximum_window,
	__out	nt_console_font_info_ex *	console_current_font_ex);


typedef int32_t __stdcall	ntcon_set_current_console_font_ex(
	__in	void *				hconout,
	__in	int32_t				maximum_window,
	__in	nt_console_font_info_ex *	console_current_font_ex);


/* console api: mouse capabilities */
typedef int32_t __stdcall	ntcon_get_number_of_console_mouse_buttons(
	__out	uint32_t *	number_of_mouse_buttons);


/* console api: window information */
typedef void *  __stdcall	ntcon_get_console_window(void);


typedef nt_coord __stdcall	ntcon_get_largest_console_window_size(
	__in	void *		hconout);


/* console api: display mode */
typedef int32_t __stdcall	ntcon_get_console_display_mode(
	__out	uint32_t *	mode_flags);


typedef int32_t __stdcall	ntcon_set_console_display_mode(
	__in	void *		hconsole,
	__in	uint32_t	mode_flags,
	__out	nt_coord *	new_screen_buffer_dimensions	__optional);


/* console api: console title */
typedef uint32_t __stdcall	ntcon_get_console_title_ansi(
	__out	char *		console_title,
	__in	uint32_t	size);


typedef uint32_t __stdcall	ntcon_get_console_title_utf16(
	__out	wchar16_t *	console_title,
	__in	uint32_t	size);


typedef int32_t __stdcall	ntcon_set_console_title_ansi(
	__in	char *		console_title);


typedef int32_t __stdcall	ntcon_set_console_title_utf16(
	__in	wchar16_t *	console_title);


typedef uint32_t __stdcall	ntcon_get_console_original_title_ansi(
	__out	char *		console_title,
	__in	uint32_t	size);


typedef uint32_t __stdcall	ntcon_get_console_original_title_utf16(
	__out	wchar16_t *	console_title,
	__in	uint32_t	size);


/* ntcon function vtbl */
typedef struct _ntcon_vtbl {
	/* console handles */
	ntcon_alloc_console * 				alloc_console;
	ntcon_attach_console * 				attach_console;
	ntcon_free_console * 				free_console;
	ntcon_get_std_handle * 				get_std_handle;

	/* read/write using std handles */
	ntcon_get_number_of_console_input_events *	get_number_of_console_input_events;
	ntcon_flush_console_input_buffer *		flush_console_input_buffer;
	ntcon_peek_console_input_ansi *			peek_console_input_ansi;
	ntcon_peek_console_input_utf16 *		peek_console_input_utf16;
	ntcon_read_console_ansi *			read_console_ansi;
	ntcon_read_console_utf16 *			read_console_utf16;
	ntcon_read_console_input_ansi *			read_console_input_ansi;
	ntcon_read_console_input_utf16 *		read_console_input_utf16;
	ntcon_read_console_output_ansi *		read_console_output_ansi;
	ntcon_read_console_output_utf16 *		read_console_output_utf16;
	ntcon_write_console_ansi * 			write_console_ansi;
	ntcon_write_console_utf16 *			write_console_utf16;
	ntcon_write_console_input_ansi *		write_console_input_ansi;
	ntcon_write_console_input_utf16 *		write_console_input_utf16;
	ntcon_write_console_output_ansi *		write_console_output_ansi;
	ntcon_write_console_output_utf16 *		write_console_output_utf16;

	/* screen buffers */
	ntcon_create_console_screen_buffer *		create_console_screen_buffer;
	ntcon_get_console_screen_buffer_info *		get_console_screen_buffer_info;
	ntcon_get_console_screen_buffer_info_ex *	get_console_screen_buffer_info_ex;
	ntcon_set_console_screen_buffer_info_ex *	set_console_screen_buffer_info_ex;
	ntcon_set_console_screen_buffer_size *		set_console_screen_buffer_size;
	ntcon_set_console_active_screen_buffer *	set_console_active_screen_buffer;
	ntcon_set_console_window_info *			set_console_window_info;
	ntcon_scroll_console_screen_buffer_ansi *	scroll_console_screen_buffer_ansi;
	ntcon_scroll_console_screen_buffer_utf16 *	scroll_console_screen_buffer_utf16;

	/* code page */
	ntcon_get_console_code_page *			get_console_code_page;
	ntcon_set_console_code_page *			set_console_code_page;

	/* console control */
	ntcon_generate_console_ctrl_event *		generate_console_ctrl_event;
	ntcon_set_console_ctrl_handler *		set_console_ctrl_handler;

	/* interface mode */
	ntcon_get_console_mode *			get_console_mode;
	ntcon_set_console_mode *			set_console_mode;

	/* console process list */
	ntcon_get_console_process_list *		get_console_process_list;

	/* aliases */
	ntcon_add_console_alias_ansi *			add_console_alias_ansi;
	ntcon_add_console_alias_utf16 *			add_console_alias_utf16;
	ntcon_get_console_alias_ansi *			get_console_alias_ansi;
	ntcon_get_console_alias_utf16 *			get_console_alias_utf16;
	ntcon_get_console_aliases_ansi *		get_console_aliases_ansi;
	ntcon_get_console_aliases_utf16 *		get_console_aliases_utf16;
	ntcon_get_console_aliases_length_ansi *		get_console_aliases_length_ansi;
	ntcon_get_console_aliases_length_utf16 *	get_console_aliases_length_utf16;
	ntcon_get_console_alias_exes_ansi *		get_console_alias_exes_ansi;
	ntcon_get_console_alias_exes_utf16 *		get_console_alias_exes_utf16;
	ntcon_get_console_alias_exes_length_ansi *	get_console_alias_exes_length_ansi;
	ntcon_get_console_alias_exes_length_utf16 *	get_console_alias_exes_length_utf16;

	/* output attributes */
	ntcon_fill_console_output_attribute *		fill_console_output_attribute;
	ntcon_read_console_output_attribute *		read_console_output_attribute;
	ntcon_write_console_output_attribute *		write_console_output_attribute;

	/* output characters */
	ntcon_fill_console_output_character_ansi *	fill_console_output_character_ansi;
	ntcon_fill_console_output_character_utf16 *	fill_console_output_character_utf16;
	ntcon_read_console_output_character_ansi *	read_console_output_character_ansi;
	ntcon_read_console_output_character_utf16 *	read_console_output_character_utf16;
	ntcon_write_console_output_character_ansi *	write_console_output_character_ansi;
	ntcon_write_console_output_character_utf16 *	write_console_output_character_utf16;

	/* output code page */
	ntcon_get_console_output_code_page *		get_console_output_code_page;
	ntcon_set_console_output_code_page *		set_console_output_code_page;

	/* text attributes */
	ntcon_set_console_text_attribute *		set_console_text_attribute;

	/* cursor info */
	ntcon_get_console_cursor_info *			get_console_cursor_info;
	ntcon_set_console_cursor_info *			set_console_cursor_info;
	ntcon_set_console_cursor_position *		set_console_cursor_position;

	/* selection info */
	ntcon_get_console_selection_info *		get_console_selection_info;

	/* history info */
	ntcon_get_console_history_info *		get_console_history_info;
	ntcon_set_console_history_info *		set_console_history_info;

	/* font info */
	ntcon_get_console_font_size *			get_console_font_size;
	ntcon_get_current_console_font *		get_current_console_font;
	ntcon_get_current_console_font_ex *		get_current_console_font_ex;
	ntcon_set_current_console_font_ex *		set_current_console_font_ex;

	/* mouse capabilities */
	ntcon_get_number_of_console_mouse_buttons *	get_number_of_console_mouse_buttons;

	/* window information */
	ntcon_get_console_window *			get_console_window;
	ntcon_get_largest_console_window_size *		get_largest_console_window_size;

	/* display mode */
	ntcon_get_console_display_mode *		get_console_display_mode;
	ntcon_set_console_display_mode *		set_console_display_mode;

	/* console title */
	ntcon_get_console_title_ansi *			get_console_title_ansi;
	ntcon_get_console_title_utf16 *			get_console_title_utf16;
	ntcon_set_console_title_ansi *			set_console_title_ansi;
	ntcon_set_console_title_utf16 *			set_console_title_utf16;
	ntcon_get_console_original_title_ansi *		get_console_original_title_ansi;
	ntcon_get_console_original_title_utf16 *	get_console_original_title_utf16;
} ntcon_vtbl;

ntcon_api
int32_t __fastcall ntcon_vtbl_init(ntcon_vtbl * pvtbl);

#ifdef __cplusplus
}
#endif
#endif