diff --git a/.github/actions/spelling/expect/expect.txt b/.github/actions/spelling/expect/expect.txt index a86ec47001f..5485ca43e43 100644 --- a/.github/actions/spelling/expect/expect.txt +++ b/.github/actions/spelling/expect/expect.txt @@ -572,6 +572,7 @@ FGHIJ fgidx FGs FILEDESCRIPTION +filehops FILESUBTYPE FILESYSPATH FILEW diff --git a/src/host/ft_host/API_FileTests.cpp b/src/host/ft_host/API_FileTests.cpp index 7b42b2b5e09..e4115a58ec4 100644 --- a/src/host/ft_host/API_FileTests.cpp +++ b/src/host/ft_host/API_FileTests.cpp @@ -670,7 +670,7 @@ void FileTests::TestReadFileBasicEmpty() const auto hIn = GetStdInputHandle(); VERIFY_IS_NOT_NULL(hIn, L"Verify we have the standard input handle."); - DWORD dwMode = 0; + DWORD dwMode = ENABLE_PROCESSED_INPUT; // ^Z is only handled when processed input is enabled. VERIFY_WIN32_BOOL_SUCCEEDED(SetConsoleMode(hIn, dwMode), L"Set input mode for test."); VERIFY_WIN32_BOOL_SUCCEEDED(FlushConsoleInputBuffer(hIn), L"Flush input buffer in preparation for test."); diff --git a/src/server/ApiDispatchers.cpp b/src/server/ApiDispatchers.cpp index efa5f65783f..f240257209f 100644 --- a/src/server/ApiDispatchers.cpp +++ b/src/server/ApiDispatchers.cpp @@ -270,6 +270,16 @@ constexpr T saturate(auto val) } CATCH_RETURN(); + if (a->ProcessControlZ) + { + // ProcessControlZ is only set for CONSOLE_IO_RAW_READ. To restore + // the behavior from Windows 7 (see filehops.c:123) we need to honor + // ^Z only if PROCESSED_INPUT is enabled. + ULONG InputMode{ 0 }; + m->_pApiRoutines->GetConsoleInputModeImpl(*pInputBuffer, InputMode); + a->ProcessControlZ = (InputMode & ENABLE_PROCESSED_INPUT) != 0; + } + TraceConsoleAPICallWithOrigin( "ReadConsole", TraceLoggingBoolean(a->Unicode, "Unicode"),