Поведение FreeConsole в Windows 8

В Windows 8 у нас есть проблема с FreeConsole. Кажется, закрывает дескрипторы stdio, не закрывая файловые потоки.

Это может быть проблема с Windows 8, или я просто неЯ не понимаю (абсолютно абсурдно), как работает подсистема консоли / графического интерфейса Windows.

Какие'происходит?

Минимальный пример ниже. Протестировано с компиляторами: VS2005, VS2013, VS2017, с использованием статически связанных ЭЛТ.

#include 
#include 
#include 

static void testHandle(FILE* file) {
  HANDLE h = (HANDLE)_get_osfhandle(fileno(file));
  DWORD flags;
  if (!GetHandleInformation(h, &flags)) {
    MessageBoxA(0, "Bogus handle!!", "TITLE", MB_OK);
  }
}

int main(int argc, char** argv)
{
  freopen("NUL", "wb", stdout); // Demonstrate the issue with NUL
  // Leave stderr as it is, to demonstrate the issue with handles
  // to the console device.

  FreeConsole();

  testHandle(stdout);
  testHandle(stderr);
}

Ответы на вопрос(2)

Ваш ответ на вопрос