- if (ShellInfoObject.HaltOutput) {\r
- //\r
- // just get some key\r
- //\r
- gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &EventIndex);\r
- gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
- ShellInfoObject.HaltOutput = FALSE;\r
+\r
+ Status = gBS->HandleProtocol (gST->ConsoleInHandle, &gEfiSimpleTextInputExProtocolGuid, (VOID **) &TxtInEx);\r
+ if (!EFI_ERROR (Status)) {\r
+ while (ShellInfoObject.HaltOutput) {\r
+\r
+ ShellInfoObject.HaltOutput = FALSE;\r
+ //\r
+ // just get some key\r
+ //\r
+ Status = gBS->WaitForEvent (1, &TxtInEx->WaitForKeyEx, &EventIndex);\r
+ ASSERT_EFI_ERROR (Status);\r
+ Status = TxtInEx->ReadKeyStrokeEx (TxtInEx, &KeyData);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ if ((KeyData.Key.UnicodeChar == L's') && (KeyData.Key.ScanCode == SCAN_NULL) &&\r
+ ((KeyData.KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID | EFI_LEFT_CONTROL_PRESSED)) ||\r
+ (KeyData.KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID | EFI_RIGHT_CONTROL_PRESSED))\r
+ )\r
+ ) {\r
+ ShellInfoObject.HaltOutput = TRUE;\r
+ }\r
+ }\r