Как завершить процесс в Windows-7, не открывая диалоговое окно WER?

Возможно ли аварийное завершение обычного процесса пользовательского режима в Windows-7 без получения диалогового окна Windows Error Reporting (WER)? (Когда и если WER обычно включен и никакие определенные флаги не применяются.)

Примечание: яне увлекающийсяотключение WERМеня интересуют сценарии сбоев, гдеWER не запущен, хотя должен и Windows «молча» завершает приложение.

В Windows XP довольно просто написать приложение на C или C ++ (в пользовательском режиме), которое портит свое собственное адресное пространство таким образом, что, когда наконец нарушается Access Access (или другое необработанное исключение Win32), Windows XP будет просто молча прекратить процесс, не сообщая пользователю вообще:

...
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.
}
...

Вызов вышеуказанной функции в простом проекте C ++ (в режиме выпуска - следите за оптимизацией компилятора при тестировании - и не запускайте под отладчиком):

Молча прекратить процесс, под XP.Отобразить диалоговое окно сбоя WER под Windows-7.В сторону: ни при каких обстоятельствах он не будет вызывать ваш собственный фильтр необработанных исключений, даже если вы установили его черезSetUnhandledExceptionFilter

Что меня сейчас интересует, так это то, был ли - под Windows 7 - механизм WER реализован таким образом, что явсегда получить сообщение об ошибке для сбоя[А] в моем приложении, илиСуществуют ли сценарии повреждения процесса даже в Windows 7, которые будут препятствовать появлению диалога WER?

Я добавлю немного чтения, которое я сделал:

В книгеWindows через C / C ++ (5-е издание Рихтера, Насарре) они описывают то, что происходит в «процессе сбоя» (стр. 711):

Фильтры исключений.......ядро обнаруживает необработанное исключениеблокировка вызова ALPC к Wer ServiceWER отчетности вступает в силу....

Теперь они указывают на то, что Win7 делает это не так, как Windows XP (цитирую эту книгу, стр. 710 :)

... Начиная с Windows Vista,UnhandledExceptionFilter функция больше не отправляет сообщение об ошибке на серверы MS. Вместо. Ядро обнаруживает, что исключение не обрабатывается потоком пользовательского режима (Шаг 4) ...

Так что это будет означать, что естьни в коем случае для процесса "сбой" - в Vista и выше - таким образом, чтобы предотвратить взлом WER. Я пытаюсь подтвердить или опровергнуть это.

[a]: Очевидно, что процесс можно легко «убить» без каких-либо следов, вызвав один из различных*exit или жеterminate* функции. Вопрос в том, если вы можете исключить такую причину прекращения, (как) возможно ли «сбить» процесс пользовательского режима на Win7 таким образом, чтобы предотвратить отображение диалога WER.

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

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