diff --git a/boot/xtldr/console.cc b/boot/xtldr/console.cc index e003591..b460c58 100644 --- a/boot/xtldr/console.cc +++ b/boot/xtldr/console.cc @@ -221,10 +221,15 @@ Console::QueryMode(OUT PUINT_PTR ResX, * @since XT 1.0 */ XTCDECL -VOID +EFI_STATUS Console::ReadKeyStroke(OUT PEFI_INPUT_KEY Key) { - XtLoader::GetEfiSystemTable()->ConIn->ReadKeyStroke(XtLoader::GetEfiSystemTable()->ConIn, Key); + /* Clear the key structure to prevent ghost keystrokes */ + Key->ScanCode = 0; + Key->UnicodeChar = 0; + + /* Read the keystroke from the EFI input console */ + return XtLoader::GetEfiSystemTable()->ConIn->ReadKeyStroke(XtLoader::GetEfiSystemTable()->ConIn, Key); } /** diff --git a/boot/xtldr/includes/xtldr.hh b/boot/xtldr/includes/xtldr.hh index 03d8146..8534bf1 100644 --- a/boot/xtldr/includes/xtldr.hh +++ b/boot/xtldr/includes/xtldr.hh @@ -93,7 +93,7 @@ class Console STATIC XTCDECL XTSTATUS PutChar(IN WCHAR Character); STATIC XTCDECL VOID QueryMode(OUT PUINT_PTR ResX, OUT PUINT_PTR ResY); - STATIC XTCDECL VOID ReadKeyStroke(OUT PEFI_INPUT_KEY Key); + STATIC XTCDECL EFI_STATUS ReadKeyStroke(OUT PEFI_INPUT_KEY Key); STATIC XTCDECL VOID ResetInputBuffer(); STATIC XTCDECL VOID SetAttributes(IN ULONGLONG Attributes); STATIC XTCDECL VOID SetCursorPosition(IN ULONGLONG PosX, diff --git a/sdk/xtdk/bltypes.h b/sdk/xtdk/bltypes.h index 11bcc0c..32bbeae 100644 --- a/sdk/xtdk/bltypes.h +++ b/sdk/xtdk/bltypes.h @@ -77,7 +77,7 @@ typedef VOID (XTCDECL *PBL_CONSOLE_DISABLE_CURSOR)(); typedef VOID (XTCDECL *PBL_CONSOLE_ENABLE_CURSOR)(); typedef VOID (XTCDECL *PBL_CONSOLE_PRINT)(IN PCWSTR Format, IN ...); typedef VOID (XTCDECL *PBL_CONSOLE_QUERY_MODE)(OUT PUINT_PTR ResX, OUT PUINT_PTR ResY); -typedef VOID (XTCDECL *PBL_CONSOLE_READ_KEY_STROKE)(OUT PEFI_INPUT_KEY Key); +typedef EFI_STATUS (XTCDECL *PBL_CONSOLE_READ_KEY_STROKE)(OUT PEFI_INPUT_KEY Key); typedef VOID (XTCDECL *PBL_CONSOLE_RESET_INPUT_BUFFER)(); typedef VOID (XTCDECL *PBL_CONSOLE_SET_ATTRIBUTES)(IN ULONGLONG Attributes); typedef VOID (XTCDECL *PBL_CONSOLE_SET_CURSOR_POSITION)(IN ULONGLONG PosX, IN ULONGLONG PosY);