FreeConsole-Verhalten unter Windows 8

Unter Windows 8 haben wir ein Problem mit FreeConsole. Es scheint, die Stdio-Handles zu schließen, ohne die Dateistreams zu schließen.

Dies kann ein Windows 8-Problem sein, oder es kann sein, dass ich die (völlig absurde) Art und Weise, wie das Windows-Konsolen- / GUI-App-Subsystem Dinge tut, einfach nicht verstehe.

Was ist los?

Minimales Beispiel unten. Getestet mit Compilern: VS2005, VS2013, VS2017 unter Verwendung einer statisch verknüpften CRT.

#include <windows.h>
#include <io.h>
#include <stdio.h>

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);
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage