/********************************************************/ /* ntcon: free-standing console interface definitions */ /* Copyright (C) 2013--2016 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.NTCON. */ /********************************************************/ #include #include #define NT_STATUS_SUCCESS 0x00000000 #define NT_STATUS_INTERNAL_ERROR 0xC00000E5 #define NTCON_PTR_INIT(x,y) pvtbl->x = \ (ntcon_##x *)pe_get_procedure_address(hkernel, #y) ntcon_api int32_t __fastcall ntcon_vtbl_init(ntcon_vtbl * pvtbl) { void * hkernel; if (!(hkernel = pe_get_kernel32_module_handle())) return NT_STATUS_INTERNAL_ERROR; /* console handles */ NTCON_PTR_INIT(alloc_console, AllocConsole); NTCON_PTR_INIT(attach_console, AttachConsole); NTCON_PTR_INIT(free_console, FreeConsole); NTCON_PTR_INIT(get_std_handle, GetStdHandle); /* read/write using std handles */ NTCON_PTR_INIT(get_number_of_console_input_events, GetNumberOfConsoleInputEvents); NTCON_PTR_INIT(flush_console_input_buffer, FlushConsoleInputBuffer); NTCON_PTR_INIT(peek_console_input_ansi, PeekConsoleInputA); NTCON_PTR_INIT(peek_console_input_utf16, PeekConsoleInputW); NTCON_PTR_INIT(read_console_ansi, ReadConsoleA); NTCON_PTR_INIT(read_console_utf16, ReadConsoleW); NTCON_PTR_INIT(read_console_input_ansi, ReadConsoleInputA); NTCON_PTR_INIT(read_console_input_utf16, ReadConsoleInputW); NTCON_PTR_INIT(read_console_output_ansi, ReadConsoleOutputA); NTCON_PTR_INIT(read_console_output_utf16, ReadConsoleOutputW); NTCON_PTR_INIT(write_console_ansi, WriteConsoleA); NTCON_PTR_INIT(write_console_utf16, WriteConsoleW); NTCON_PTR_INIT(write_console_input_ansi, WriteConsoleInputA); NTCON_PTR_INIT(write_console_input_utf16, WriteConsoleInputW); NTCON_PTR_INIT(write_console_output_ansi, WriteConsoleOutputA); NTCON_PTR_INIT(write_console_output_utf16, WriteConsoleOutputW); /* screen buffers */ NTCON_PTR_INIT(create_console_screen_buffer, CreateConsoleScreenBuffer); NTCON_PTR_INIT(get_console_screen_buffer_info, GetConsoleScreenBufferInfo); NTCON_PTR_INIT(get_console_screen_buffer_info_ex, GetConsoleScreenBufferInfoEx); NTCON_PTR_INIT(set_console_screen_buffer_info_ex, SetConsoleScreenBufferInfoEx); NTCON_PTR_INIT(set_console_screen_buffer_size, SetConsoleScreenBufferSize); NTCON_PTR_INIT(set_console_active_screen_buffer, SetConsoleActiveScreenBuffer); NTCON_PTR_INIT(set_console_window_info, SetConsoleWindowInfo); NTCON_PTR_INIT(scroll_console_screen_buffer_ansi, ScrollConsoleScreenBufferA); NTCON_PTR_INIT(scroll_console_screen_buffer_utf16, ScrollConsoleScreenBufferW); /* code page */ NTCON_PTR_INIT(get_console_code_page, GetConsoleCP); NTCON_PTR_INIT(set_console_code_page, SetConsoleCP); /* console control */ NTCON_PTR_INIT(generate_console_ctrl_event, GenerateConsoleCtrlEvent); NTCON_PTR_INIT(set_console_ctrl_handler, SetConsoleCtrlHandler); /* interface mode */ NTCON_PTR_INIT(get_console_mode, GetConsoleMode); NTCON_PTR_INIT(set_console_mode, SetConsoleMode); /* console process list */ NTCON_PTR_INIT(get_console_process_list, GetConsoleProcessList); /* aliases */ NTCON_PTR_INIT(add_console_alias_ansi, AddConsoleAliasA); NTCON_PTR_INIT(add_console_alias_utf16, AddConsoleAliasW); NTCON_PTR_INIT(get_console_alias_ansi, GetConsoleAliasA); NTCON_PTR_INIT(get_console_alias_utf16, GetConsoleAliasW); NTCON_PTR_INIT(get_console_aliases_ansi, GetConsoleAliasesA); NTCON_PTR_INIT(get_console_aliases_utf16, GetConsoleAliasesW); NTCON_PTR_INIT(get_console_aliases_length_ansi, GetConsoleAliasesLengthA); NTCON_PTR_INIT(get_console_aliases_length_utf16, GetConsoleAliasesLengthW); NTCON_PTR_INIT(get_console_alias_exes_ansi, GetConsoleAliasExesA); NTCON_PTR_INIT(get_console_alias_exes_utf16, GetConsoleAliasExesW); NTCON_PTR_INIT(get_console_alias_exes_length_ansi, GetConsoleAliasExesLengthA); NTCON_PTR_INIT(get_console_alias_exes_length_utf16, GetConsoleAliasExesLengthW); /* output attributes */ NTCON_PTR_INIT(fill_console_output_attribute, FillConsoleOutputAttribute); NTCON_PTR_INIT(read_console_output_attribute, ReadConsoleOutputAttribute); NTCON_PTR_INIT(write_console_output_attribute, WriteConsoleOutputAttribute); /* output characters */ NTCON_PTR_INIT(fill_console_output_character_ansi, FillConsoleOutputCharacterA); NTCON_PTR_INIT(fill_console_output_character_utf16, FillConsoleOutputCharacterW); NTCON_PTR_INIT(read_console_output_character_ansi, ReadConsoleOutputCharacterA); NTCON_PTR_INIT(read_console_output_character_utf16, ReadConsoleOutputCharacterW); NTCON_PTR_INIT(write_console_output_character_ansi, WriteConsoleOutputCharacterA); NTCON_PTR_INIT(write_console_output_character_utf16, WriteConsoleOutputCharacterW); /* output code page */ NTCON_PTR_INIT(get_console_output_code_page, GetConsoleOutputCP); NTCON_PTR_INIT(set_console_output_code_page, SetConsoleOutputCP); /* text attributes */ NTCON_PTR_INIT(set_console_text_attribute, SetConsoleTextAttribute); /* cursor info */ NTCON_PTR_INIT(get_console_cursor_info, GetConsoleCursorInfo); NTCON_PTR_INIT(set_console_cursor_info, SetConsoleCursorInfo); NTCON_PTR_INIT(set_console_cursor_position, SetConsoleCursorPosition); /* selection info */ NTCON_PTR_INIT(get_console_selection_info, GetConsoleSelectionInfo); /* history info */ NTCON_PTR_INIT(get_console_history_info, GetConsoleHistoryInfo); NTCON_PTR_INIT(set_console_history_info, SetConsoleHistoryInfo); /* font info */ NTCON_PTR_INIT(get_console_font_size, GetConsoleFontSize); NTCON_PTR_INIT(get_current_console_font, GetCurrentConsoleFont); NTCON_PTR_INIT(get_current_console_font_ex, GetCurrentConsoleFontEx); NTCON_PTR_INIT(set_current_console_font_ex, SetCurrentConsoleFontEx); /* mouse capabilities */ NTCON_PTR_INIT(get_number_of_console_mouse_buttons, GetNumberOfConsoleMouseButtons); /* window information */ NTCON_PTR_INIT(get_console_window, GetConsoleWindow); NTCON_PTR_INIT(get_largest_console_window_size, GetLargestConsoleWindowSize); /* console api: display mode */ NTCON_PTR_INIT(get_console_display_mode, GetConsoleDisplayMode); NTCON_PTR_INIT(set_console_display_mode, SetConsoleDisplayMode); /* console title */ NTCON_PTR_INIT(get_console_title_ansi, GetConsoleTitleA); NTCON_PTR_INIT(get_console_title_utf16, GetConsoleTitleW); NTCON_PTR_INIT(set_console_title_ansi, SetConsoleTitleA); NTCON_PTR_INIT(set_console_title_utf16, SetConsoleTitleW); NTCON_PTR_INIT(get_console_original_title_ansi, GetConsoleOriginalTitleA); NTCON_PTR_INIT(get_console_original_title_utf16, GetConsoleOriginalTitleW); return NT_STATUS_SUCCESS; }