Wie kann man einen Prozess unter Windows-7 zum Absturz bringen, ohne den WER-Dialog zu erhalten?

Ist es möglich, einen normalen Benutzermodusprozess unter Windows-7 zum Absturz zu bringen, ohne das Dialogfeld Windows Error Reporting (WER) zu erhalten? (Wann und wenn WER normalerweise aktiviert ist und keine bestimmten Flags angewendet werden.)

Hinweis: Ich binnicht interessiert anWER deaktivierenIch interessiere mich für Absturzszenarien, in denenWER wird nicht gestartet, obwohl es sollte und Windows "still" beendet eine App.

Unter Windows XP ist es ziemlich trivial, eine C- oder C ++ - Anwendung (im Benutzermodus) zu schreiben, die ihren eigenen Adressraum so durcheinander bringt, dass Windows XP letztendlich eine Zugriffsverletzung (oder eine andere nicht behandelte Win32-Ausnahme) auslöst Beenden Sie den Vorgang einfach stillschweigend, ohne den Benutzer darüber zu informieren:

...
void stackbreaker() {
    printf("%s\n", __FUNCTION__);
    // global/static buffer
    static char buf[128] = "In a hole in the ground there lived a hobbit. And it burrowed through your stack. It even built a round door into you function.";
    // Get address on the stack
    char local;
    char* stack = &local;
    // nuke the stack:
    memcpy(stack - 64, buf, sizeof(buf));
    // Kaboom. No user defined unhandled exception filter will be called. Stack nuked.
    // Process will terminate silently on Windows XP.
    // But on Windows-7 you still get the WER dialog.
}
...

Das Aufrufen der obigen Funktion in einem einfachen C ++ - Projekt (im Release-Modus - achten Sie beim Testen auf diese Compiler-Optimierungen - und nicht unter dem Debugger) bewirkt Folgendes:

Beenden Sie den Vorgang unbemerkt unter XP.Zeigen Sie den WER-Absturzdialog unter Windows-7 an.Nebenbei: In keinem Fall wird ein eigener Filter für nicht behandelte Ausnahmen aufgerufen, auch wenn Sie einen über festlegenSetUnhandledExceptionFilter

Ich frage mich jetzt, ob der WER-Mechanismus unter Windows 7 so implementiert wurde, wie ich es getan habeimmer bekomme einen Fehlerdialog für einen Absturz[ein] in meiner Bewerbung oderGibt es auch in Windows 7 Prozessverfälschungsszenarien, die verhindern, dass der WER-Dialog angezeigt wird?

Ich füge ein bisschen von dem hinzu, was ich gelesen habe:

Im BuchWindows über C / C ++ (5. Auflage von Richter, Nasarre) Sie beschreiben, was in einem "Fehlerprozess" passiert (S. 711):

Ausnahmefilter.......Der Kernel erkennt eine nicht behandelte AusnahmeBlockierung des ALPC-Anrufs bei Wer ServiceDie WER-Berichterstattung hat begonnen....

Nun, sie weisen darauf hin, dass Win7 dies anders macht als Windows XP (um dieses Buch zu zitieren, S. 710 :)

... Ab Windows Vista wird dieUnhandledExceptionFilter Die Funktion sendet keinen Fehlerbericht mehr an die Server von MS. Stattdessen. Der Kernel erkennt, dass die Ausnahme nicht vom Benutzermodus-Thread behandelt wird (Schritt 4) ...

Das würde also bedeuten, dass es gibtauf keinen Fall für einen Prozess zum "Absturz" - in Vista und höher - in einer Weise, die verhindert, dass WER einspringt. Ich versuche, dies entweder zu bestätigen oder zu widerlegen.

[a]: Offensichtlich kann ein Prozess leicht spurlos "getötet" werden, indem einer der verschiedenen aufgerufen wird*exit oderterminate* funktionen. Die Frage ist, ob Sie einen solchen Kündigungsgrund ausschließen können, (wie) es möglich ist, einen Benutzermodusprozess unter Win7 so "zum Absturz zu bringen", dass der WER-Dialog nicht angezeigt wird.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage